在工作的过程中看到实体类里用了很多Attribute,一直没有时间来研究它到时是什么?它有什么用?没有这个东东程序是否还能运行等等?带着这一系列的疑问来和大家一起学习一下Attribute。
一、是什么?
通俗的来说Attribute就是一个类,在CSDN中是这样解释的:
他是公共语言运行时允许你添加类似关键字的描述声明,叫做attributes,它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NETFramework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。
在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等。那么就下来就让我们来具体的谈谈它到底怎么用?
二、怎么用?
(一)作为编译器的指令
(1)
Conditional:起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。一般在程序调试的时候使用。
(2)DllImport:用来标记非.NET的函数,表明该方法在一个外部的DLL中定义。
(3)Obsolete:这个属性用来标记当前的方法已经被废弃,不再使用了。
(二)自定义Attribute类
(1)Attribute的命名规范
也就是你的Attribute的类名+"Attribute",当你的Attribute施加到一个程序的元素上的时候,编译器先查找你的Attribute的定义,如果没有找到,那么它就会查找“Attribute名称"+Attribute的定义。如果都没有找到,那么编译器就报错。
(2)可以通过AttributeUsage的Attribute来限定你的Attribute所施加的元素的类型
[AttributeUsage(AttributeTargets.Class|AttributeTargets.Method)]
public classClassMethodTargetAttribute : Attribute{}
以上只是对它的一些简单的了,实例等下次再附加。
三、联想到什么?
通过以上对Attribute的一些介绍,我们知道在类的成员中有property成员,二者在中文中都做属性解释,那么它们到底是不是同一个东西呢?从代码上看,明显不同。
首先,它们在代码中的位置不同
其次,写法不同(Attribute必须写在一对方括号中)
四、作用
那么它到底有什么作用呢?接下来谈谈自己的体会
(1)修饰C#代码,对其进行描述或声明;
(2)在运行时通过反射来获取并使用其声明或控制信息。[不是供一般意义上调用或使用的]
五、总结
通过以上对Attribute的介绍,简单的概括就是修饰C#代码并对其类型、方法和属性等的描述和声明的类。在下一篇会通过实例来进一步对其进行介绍。