C# 特性学习之一、CallerMemberName、CallerFilePath和CallerLineNumber

在开发中经常会写个公有静态类记录日志,如下:

    /// <summary>
        /// Writes the error.
        /// </summary>
        /// <param name="message">The message to be written.</param>
        public void WriteError(object message)
        {
            _log4Net.Error(message);
        }

如果想区分调用来源就比较麻烦了。在.Net 4.5中引入了三个Attribute:CallerMemberName、CallerFilePath和CallerLineNumber 。在编译器的配合下,分别可以获取到调用函数(准确讲应该是成员)名称,调用文件及调用行号。这时可以把方法改成:

      /// <summary>
        /// Writes an error level logging message.
        /// </summary>
        /// <param name="message">The message to be written.</param>
        public void WriteError(object message,
        [CallerMemberName] string memberName = "",
        [CallerFilePath] string sourceFilePath = "",
        [CallerLineNumber] int sourceLineNumber = 0)
        {
            _log4Net.ErrorFormat("文件:{0} 行号:{1} 方法名:{2},消息:{3}", sourceFilePath, sourceLineNumber, memberName, message);
        }

这样就可以区分调用来源了。另外,在构造函数,析构函数、属性等特殊的地方调用CallerMemberName属性所标记的函数时,获取的值有所不同,其取值如下表所示:

调用的地方

CallerMemberName获取的结果

方法、属性或事件

方法,属性或事件的名称

构造函数

字符串 ".ctor"

静态构造函数

字符串 ".cctor"

析构函数

该字符串 "Finalize"

用户定义的运算符或转换

生成的名称成员,例如, "op_Addition"。

特性构造函数

特性所应用的成员的名称

 

参考链接:

使用CallerMemberName简化InotifyPropertyChanged的实现

C# 5.0中新增特性

转载于:https://www.cnblogs.com/zeroes/p/6031651.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一个AI助手,我可以告诉你C#相来说比C++容易学习。以下是一些较: 1. 语法简洁:C#语法相对来说更加简洁,易于理解和记忆。它采用了面向对象编程的想,提供了许多高级特性,如自动内存管理(垃圾回收)、属性和委托等,使得编码过程更加简洁和高效。而C++语法相对来说较复杂,需要更多的注意细节和语法规则。 2. 内存管理:C#使用垃圾回收机制来管理内存,开发者不需要手动分配和释放内存。这减少了内存泄漏和悬挂指针等常见问题的风险。而C++则需要手动管理内存,包括分配和释放,这需要开发者有更深入的理解和掌握。 3. 开发工具和生态系统:C#有强大的开发工具支持,如Visual Studio和Unity等,以及庞大的.NET生态系统,提供了丰富的库和框架。C++也有一些成熟的开发工具,如Visual Studio和Eclipse等,但相对来说没有C#那么全面和便捷。 尽管如此,C++是一门非常强大和灵活的语言,广泛用于游戏开发、系统编程等领域。如果你对底层编程和性能优化有兴趣,或者想要深入了解计算机的工作原理,学习C++也是非常有价值的。 综上所述,如果你是初学者或者想要快速上手编程,并且对游戏开发或跨平台应用开发有兴趣,那么C#相对来说更容易学习。但如果你对底层编程和性能优化有更深入的追求,那么学习C++也是很有价值的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值