初见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信息。
下面链接的文章也不错