内容来自《ASP.NET网站开发与项目实战(第二版)》,清华大学出版社,张正礼,陈作聪,王坚宁编著
在日志组件中,需要记录方法调用信息。使用调用方信息属性,可以获取关于调用方的信息,调用信息包括:方法成员名称、源文件路径和行号这些信息可用于跟踪,调试和创建诊断工具非常有用。
注意需要引用System.Runtime.CompilerServices命名空间。
调用方信息属性:
CallerFilePath:包含调用方源文件的完整路径。
CallerLineNumber:调用方所在源文件的行号。
CallerMemberName:方法或调用方的属性名称。
在使用调用方信息的属性时,应注意:
必须为每个可选参数指定一个显示默认值;
不能将调用方信息属性应用于未指定为选项的参数;
调用方信息属性不会使用一个参数选项。相反,当参数省略时,它们影响传递的默认值。
可以使用CallerMemberName属性来避免指定成员名称作为String参数传递到调用的方法。通过使用这种方法,可以避免重命名重构而不更改String值的问题。针对以下问题是有效的:
使用跟踪和诊断实例;
在绑定数据时,实现INotifyPropertyChanged接口;
绑定控件的属性已更改,所以该控件可显示最新信息。但CallMemberName属性必须指定属性的名称为文本类型。
此外,不同类型方法返回值有所不同。
方法、属性或事件,返回调用的方法、属性或事件的名称;
构造函数,返回字符串“.ctor”;
静态构造函数,返回字符串“.cctor”;
析构函数,返回字符串“Finalize”;
用户定义的运算符或转换,返回字符串生成的成员名称,例如,“op_Addition”;
特性构造函数,特性所应用的成员,如果属性是成员中的任何元素(如参数、返回值或泛型类型参数),此结果是与组件关联的成员名称;
不包含的成员(如,程序集级别或特性应用于类型),可选参数的默认值。
例
public static void Main(string[] args)
{
TraceMessage("获得调用方信息。");
Console.Read();
}
#region 获取调用方信息
public static void TraceMessage(string message, [CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0)
{
Trace.WriteLine("信息内容:" + message);
Trace.WriteLine("调用方名称:"+memberName);
Trace.WriteLine("调用方源文件路径:"+sourceFilePath);
Trace.WriteLine("调用方在源文件的行号:" + sourceLineNumber);
}
#endregion
结果,在输出窗口。