.NET中Attribute
什么是Attribute(特性)?和Property(属性)是什么区别?
我们来看看MSDN中对特性的描述:
Attribute 类将预定义的系统信息或用户定义的自定义信息与目标元素相关联。目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模块、参数、属性、返回值、结构或其他特性。特性在您编译代码时被发送到元数据中,并可通过运行时反射服务用于公共语言运行时以及任何自定义工具或应用程序。通俗地理解可以这么表述:你可以通过Attribute将一些额外信息加在一些目标元素上(类,字段,接口等),程序编译的时候就将这些额外的信息系列化程序集的元数据中,当你运行程序的时候可以通过反射技术从程序集元数据中读取这些额外信息,并根据这些额外信息决定你程序的行为。
Attribute和Property有什么区别?其实这个问题是针对中文背景的开发者而言的,因为很多中文译本把Attribute和Property都翻译成属性,在这里为了区分,我们把Attribute翻译为特性,Attribute和Property基本没有什么瓜葛,因为它们是.NET中不同层面的东西,Property就是我们再熟悉不过的定义在类中的属性,它属于面向对象理论范畴,而Attribute是编程语言文法层面的东西,其定义在上面一段已经描述。
你使用过.NET定义好的Attribute吗?
在.NET的基础类库中提供了很多定制好的Attribute供开发人员使用,这些定制的Attribute目的的方便开发者在代码中表达他们的意图。如下面三个Attribute类都是C#编译器能够理解的特性类:
Obsolete:这个属性用来标记不再使用的程序实体(如类或方法),每次使用标记为过时的实体时,会设设定此特性的方法,产生警告或错误。
Conditional:该特性可以标示出某种环境设置下某个方法是否应该被调用。
Serializable:指示一个类可以序列化。
下面以Obsolete特性的使用为例,说明Attribute是如何应用它的目标元素的。
namespace AttributeDemo
{
class Program
{
static void Main(string[] args)
{
MyClass myclass = new MyClass();
myclass.OldMethod();
Console.ReadKey();
}
}
public class MyClass
{
[Obsolete("这是一个旧的方法,请调用新的方法NewMethod")]
public void OldMethod()
{
Console.WriteLine("这是旧方法");
}
public void NewMethod()
{
Console.WriteLine("这是新方法");
}
}
}
调试这段程序的时候会发出警告信息,如下图所示:
相关新闻>>
- 发表评论
-
- 最新评论 更多>>