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

本文关键字:参数 方法 输入 属性 | 更新日期: 2023-09-27 17:57:46

我有一个简单的示例

  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]属性作为输入参数的目的吗?我们什么时候应该用属性标记输入参数?

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

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

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

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

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

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

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!");)。希望它是清楚的。

参考系统.runtime.compilerservices