将属性作为输入参数的方法

时间:2016-07-19 17:28:49

标签: c# attributes

我有一个简单的例子

  class Program
{
    static void DoProcessing()
    {
        TraceMessage("Hello from DoProcessing.");
    }

    static void TraceMessage(string message,

            [CallerMemberName] string memberName = "",
            [CallerFilePath] string sourceFilePath = "",
            [CallerLineNumber] int sourceLineNumber = 0)
    {
        Console.WriteLine("message: " + message);
        Console.WriteLine("member name: " + memberName);
        Console.WriteLine("source file path: " + sourceFilePath);
        Console.WriteLine("source line number: " + sourceLineNumber);
        Console.WriteLine(new string('-',25));
    }

    static void Main()
    {

        TraceMessage("Hello from Main!");

        Console.WriteLine(new string('-',40));
        DoProcessing();
        Console.ReadKey();
    }
}

有人可以解释使用[CallerMemberName],[CallerFilePath],[CallerLineNumber]属性作为输入参数的目的是什么?当我们应该用属性标记输入参数时?

1 个答案:

答案 0 :(得分:0)

CallerMemberName 允许您获取方法调用者的方法或属性名称。

CallerFilePath 允许您获取包含调用者的源文件的完整路径。这是编译时的文件路径。

CallerLineNumber 允许您获取调用该方法的源文件中的行号。

这些属性属于System.Runtime.CompilerServices Namespace,它为使用托管代码指定元数据中影响公共语言运行库的运行时行为的编译器编写者提供了功能。

在您的情况下,您的输出将是

message: Hello from Main!
member name: Main
source file path: c:\Users\Saket\Documents\Visual Studio 2012\Projects\ConsoleAp
plication3\ConsoleApplication3\Program.cs
source line number: 35

这里打印的来电者姓名为main(),文件路径和行号为35(TraceMessage("Hello from Main!");)。希望很清楚。

参考system.runtime.compilerservices

相关问题