获取调用者信息包括三个特性,分别是CallerMemberName、CallerLineNumber、CallerFilePath。
1. CallerMemberName
- 功能:用于获取调用当前方法的成员名称。
- 使用场景:通常用于日志记录,可以自动记录哪个方法或属性触发了当前方法的调用。
public void Log(string message, [CallerMemberName] string memberName = null)
{
Console.WriteLine($"Message: {message}, Called by: {memberName}");
}
public void Test()
{
Log("Hello, World!");
}
在上面的代码中,调用Log
方法时,memberName
参数会自动被赋值为"Test"
,因为Test
方法调用了Log
方法。
2. CallerLineNumber
- 功能:用于获取调用当前方法的代码行号。
- 使用场景:用于调试和日志记录,可以提供调用代码的具体位置信息。
public void Log(string message, [CallerLineNumber] int lineNumber = 0)
{
Console.WriteLine($"Message: {message}, Line Number: {lineNumber}");
}
public void Test()
{
Log("Hello, World!");
}
在上面的代码中,调用Log
方法时,lineNumber
参数会自动被赋值为调用Log
方法的代码行号.
3. CallerFilePath
- 功能:用于获取调用当前方法的文件的路径。
- 使用场景:用于调试和日志记录,可以提供调用代码所在的文件信息。
public void Log(string message, [CallerFilePath] string filePath = null)
{
Console.WriteLine($"Message: {message}, File Path: {filePath}");
}
public void Test()
{
Log("Hello, World!");
}
在上面的代码中,调用Log
方法时,filePath
参数会自动被赋值为包含调用Log
方法的代码的文件的完整路径。
注意事项
- 这些特性是通过编译器在编译时注入的,因此它们不会对运行时性能产生影响.
- 这些特性通常用于辅助开发和调试,而不是在生产代码中频繁使用.
- 使用这些特性时,参数必须有默认值,因为它们在编译时会被替换为实际值.