C#:Attribute与Property

本文深入探讨C#中的Attribute特性,介绍其定义、用途及其实现细节。通过具体示例展示了Attribute如何为代码元素提供元数据,并可在运行时通过反射获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

  • 一.什么是Attribute

    先看下面的三段代码:

    1.自定义Attribute类:VersionAttribute

     

    2.使用自定义Attribute的Class:

     

    3.上面这个Class中的Attribute一般会被如何使用呢?

     

    •  
      • 2.Attribute:

        Attribute的目标是:为元素提供附加信息。它的作用更类似于注释。

        可以说,Property/Field和Attribute是两个完全不同的概念,虽然他们有些时候能做一样的事,但请记住,他们是从本质上就不同的两个东西。

        三.实现自己的Attribute时需要注意的一些问题

        1.自定义的Attribute必须直接或者间接继承System.Attribute。

        2.这里有一个约定:所有自定义的特性名称都应该有个Attribute后缀。因为当你的Attribute施加到一个程序的元素上的时候,编译器先查找你的Attribute的定义,如果没有找到,那么它就会查找“Attribute名称"+Attribute的定义。如果都没有找到,那么编译器就报错。这就是为什么我可以再上面第一段代码中,定义一个VersionAttribute,但在第二段代码中,我使用却是Version这个Attribute。:>

        下面是一些开发自定义Attribute时,可能需要用到的资料:

        【1】Attribute可以关联的元素包括:

        程序集(assembly)、模块(module)、类型(type)、属性(property)、事件(event)、字段(field)、方法(method)、参数(param)、返回值(return)。例如:

         

        • 用指定的前缀来表示特性所应用的目标元素,建议这样来处理,因为显式处理可以消除可能带来的二义性。

          【2】AttributeTargets目标包括:

          AttributeTargets目标包括 

          【3】AttributeUsageAttribute中的3个属性(Property)说明:

          AttributeUsageAttribute中的3个属性(Property)说明   

          四.参考资料

          【1】Msdn

          【2】《你必须知道的.NET之特性和属性》,博主严重推荐!

          【3】《Attribute在.net编程中的应用》系列文章

    • 示例完毕!上面三段代码相信已经说明了Attribute大概是一个什么东西和怎么去用。

      二.深入讨论Attribute

      1.Attribute的概念定义

      关于Attribute概念的定义,我直接引用《你必须知道的.NET之特性和属性》中的一段来说明:

      MADN的定义为:公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据(metadata)保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。

      我们简单的总结为:定制特性attribute,本质上是一个类,其为目标元素提供关联附加信息,并在运行期以反射的方式来获取附加信息。

      噢,原来Attribute的目的是为元素提供关联附加信息。其中,上面第一段代码中“[AttributeUsage(AttributeTargets.Class)] ”说明了Attribute提供附加信息的元素是Class,所以如果上面第二段的代码改为:

       

       

       

       

       

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值