总目录
文章目录
- 总目录
- 前言
- 一、作用
- 二、使用
- 1.案例
- 三、使用场景
- 总结
前言
本文主要介绍CallerMemberName,CallerFilePath,CallerLineNumber的使用。
一、作用
本文将介绍的三个特性作用如下:
- CallerMemberName 允许获取方法调用方的方法或属性名称
- CallerFilePath 允许获取包含调用方的源文件的完整路径。 这是编译时的文件路径。
- CallerLineNumber 允许获取源文件中调用方法的行号。
二、使用
1.案例
借用微软文档中的案例,代码如下(示例):
public void DoProcessing()
{
TraceMessage("Something happened.");
}
public void TraceMessage(string message,
[System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
[System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
[System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
System.Diagnostics.Trace.WriteLine("message: " + message);
System.Diagnostics.Trace.WriteLine("member name: " + memberName);
System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}
// Sample Output:
// message: Something happened.
// member name: DoProcessing
// source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
// source line number: 31
由以上案例以及案例输出结果我们需要知道以下几点:
- CallerMemberName,CallerFilePath,CallerFilePath三个特性修饰的参数,必须指定默认值,如
[System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
- 通过以上三个特性修饰后的参数,会将特性功能中的获取的数据存进参数内,以供外界使用
三、使用场景
- 可用于错误日志的记录,使用以上特性可以定位到具体的调用方以及代码行
- 可用于实现 INotifyPropertyChanged 接口,通过CallerMemberName可以让接口的实现更加简洁,如下所示:
public class PropertyChangedBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string propertyName=null)
{
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName));
}
}
总结
以上就是今天要介绍的内容,希望以上内容可以帮助到你,如文中有不对之处,还请批评指正。
参考文档:
CallerMemberNameAttribute 类
CallerFilePathAttribute 类
CallerLineNumberAttribute 类