C# 特性学习之一、CallerMemberName、CallerFilePath和CallerLineNumber
2019-07-23 12:02 音乐让我说 阅读(1097) 评论(0) 收藏 举报在.Net 4.5中引入了三个Attribute:CallerMemberName、CallerFilePath和CallerLineNumber 。在编译器的配合下,分别可以获取到调用函数(准确讲应该是成员)名称,调用文件及调用行号。
System.Runtime.CompilerServices.CallerMemberNameAttribute
System.Runtime.CompilerServices.CallerFilePathAttribute
System.Runtime.CompilerServices.CallerLineNumberAttribute
示例:
public static class CallerMemberNameAttributeTest { public static void Test() { UserQc userQc1 = new UserQc { NameLike = "zhang san" }; WriteError("测试 .NET 4.5 中的 CallerMemberNameAttribute "); } /// <summary> /// Writes an error level logging message. /// </summary> /// <param name="message">The message to be written.</param> private static void WriteError(object message, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) { Console.WriteLine("文件:{0} 行号:{1} 方法名:{2},消息:{3}", sourceFilePath, sourceLineNumber, memberName, message); } }
编译后,经过反编译的代码
public static class CallerMemberNameAttributeTest { public static void Test() { new UserQc().NameLike = "zhang san"; WriteError("测试 .NET 4.5 中的 CallerMemberNameAttribute ", "Test", "D:\\xxx\\Codes\\CallerMemberNameAttributeTest.cs", 15); } private static void WriteError(object message, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) { Console.WriteLine("文件:{0} 行号:{1} 方法名:{2},消息:{3}", sourceFilePath, sourceLineNumber, memberName, message); } }
参考:https://www.cnblogs.com/zeroes/p/6031651.html
谢谢浏览!
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号