C# Attribute之简解

初见Attribute,没明白这个是什么东东,找了资料简单理解下,具体用处或是优点目前还不知道。

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

实质:是一个类

1 定义一个Attribute

[AttributeUsage(AttributeTargets.Class)] //限定Version这个特性只能用于类 
public class VersionAttribute : Attribute  
{  
    public string Name { get; set; }  
    public string Date { get; set; }  
    public string Describtion { get; set; }  
} 

2.使用定义Attribute:

[Version(Name = "Test", Date = "2009-07-20", Describtion = "Test class")]  
public class MyCode  
{  
    //所有自定义的特性名称都应该有个Attribute后缀。
    //因为当你的Attribute施加到一个程序的元素上的时候,
    //编译器先查找你的Attribute的定义,如果没有找到,
    //那么它就会查找“Attribute名称"+Attribute的定义。
    //所以[VersionAttribute(Name = "Test", Date = "2009-07-20", Describtion = "Test class")] 也是OK的
} 

3 用法

class Program  
{  
    static void Main(string[] args)  
    {  
        var info = typeof(MyCode);  
        var classAttribute = (VersionAttribute)Attribute.GetCustomAttribute(info, typeof(VersionAttribute));  
        Console.WriteLine(classAttribute.Name);  
        Console.WriteLine(classAttribute.Date);  
        Console.WriteLine(classAttribute.Describtion);  
    }  
} 

 

Attribute---> 特性   Property--->属性

Attribute定义:

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

[AttributeUsageAttribute(AttributeTarget.All),AllowMultiple = true, Inherited = true]  表示可作用于任何字段 类等

[AttributeUsage(AttributeTargets.Class)]  只能用于类

错误示例

public class MyCode  
{  
    [Version(Name = "hyddd", Date = "2009-07-20", Describtion = "hyddd's class")]  
    public void Test() { }  
    //会报错,因为Version特性被限定用于类,不能用于方法
}  
 

Attribute类作为编译指令,是在编译的时候被实例化的,而不是像通常的类那样在运行时候才实例化。所以在第三段代码中,你可以在没有实例化MyCode对象的情况下取到MyCode的Attribute信息。由于Attribute类是在编译的时候被实例化的,所以你还可以用外部工具维护这些Attribute信息。

下面链接的文章也不错

https://www.cnblogs.com/jhxk/articles/1819059.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值