C# CallerMemberName,CallerFilePath,CallerLineNumber的使用

总目录



前言

本文主要介绍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 类

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值