C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用介绍方法
在C# 5.0及以上版本中,通过使用CallerMemberName、CallerFilePath和CallerLineNumber特性,可以在方法内部获取调用该方法的成员、代码文件名以及代码行号等信息,便于对代码进行调试和日志记录。
CallerMemberName
CallerMemberName是用来获取调用该方法的成员名称的特性。在方法中使用CallerMemberName特性,可以直接获取调用该方法的成员名称。示例如下:
public void Log(string message, [CallerMemberName] string memberName = "")
{
Console.WriteLine("{0}: {1}", memberName, message);
}
public void Test()
{
Log("Hello World!");
}
在调用Test方法的过程中,Log方法会输出调用它的成员名称,即Test。如果不传递memberName参数,则默认获取方法名称,也就是Log。
CallerFilePath
CallerFilePath是用来获取调用该方法的代码文件路径的特性。在方法中使用CallerFilePath特性,可以直接获取调用该方法的代码文件路径。示例如下:
public void Log(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string filePath = "",
[CallerLineNumber] int lineNumber = 0)
{
Console.WriteLine("{0}:{1}({2}):{3}",
Path.GetFileName(filePath),
memberName,
lineNumber,
message);
}
public void Test()
{
Log("Hello World!");
}
在调用Test方法的过程中,Log方法会输出调用它的代码文件路径和调用该方法的代码行号。如果不传递filePath和lineNumber参数,则默认获取当前代码文件路径和行号。
示例说明
首先,我们定义一个简单的Person类来表示一个人:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public void UpdateInfo(string name, int age,
[CallerMemberName] string memberName = "",
[CallerFilePath] string filePath = "",
[CallerLineNumber] int lineNumber = 0)
{
Name = name;
Age = age;
Console.WriteLine("在{0}文件的第{1}行,{2}方法调用了UpdateInfo方法:",
filePath,
lineNumber,
memberName);
Console.WriteLine("{0}更新了信息: 名字: {1} 年龄:{2}",
Name,
Age,
filePath);
}
}
然后,我们在Main方法中创建一个Person对象并调用UpdateInfo方法:
static void Main(string[] args)
{
var person = new Person();
person.UpdateInfo("小明", 18);
}
运行以上代码后,输出结果如下:
在C:\Users\Administrator\Desktop\ConsoleApp1\ConsoleApp1\Program.cs文件的第23行,Main方法调用了UpdateInfo方法:
小明更新了信息: 名字: 小明 年龄:18
输出结果中,可以看到UpdateInfo方法输出了调用它的方法名称、代码文件名和行号,方便我们进行调试和日志记录。
另外一个示例是在日志记录类Log中使用了CallerMemberName和CallerFilePath特性,示例如下:
public class Log
{
public static void Write(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string filePath = "",
[CallerLineNumber] int lineNumber = 0)
{
Console.WriteLine("{0} ({1}:{2}): {3}",
memberName,
Path.GetFileName(filePath),
lineNumber,
message);
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public void UpdateInfo(string name, int age)
{
Name = name;
Age = age;
Log.Write("{0}更新了信息: 名字: {1} 年龄:{2}", Name, Age);
}
}
在UpdateInfo方法中调用了Log.Write方法来输出日志,Log.Write方法会自动获取调用它的成员名称、代码文件名和行号等信息。这样,我们就可以方便地对程序进行调试和日志记录。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用介绍方法 - Python技术站