代码改变世界

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

 

谢谢浏览!