一·特性
特性(Attribute)是一种标签,用于标记程序中的各种元素的行为信息。通常在要应用的元素前,增加[]来描述。
.Net中主要提供了2种类型的特性:预定义特性和自定义特性。
一)预定义特性
.Net框架中主要提供了三种预定义特性:AttributeUsage,Conditional,Obsolete。
1)AttributeUsage: 用来规定特性可应用到的项目类型。其语法如下:[AttributeUsage(validon, AllowMultiple=allowMultiple,Inherited=inherited)]。validon规定可防止的语言元素,可选值为枚举AttributeTargets的集合(例如AttributeTargets.Class类, AttributeTargets.Constructor构造器, AttributeTargets.Field域, AttributeTargets.Method方法, AttributeTargets.Property属性),默认值为AttributeTargets.All。allowMultiple表示该特性是否为多用的。inherited表示该特性是否可被继承。
2)Conditional: 标记条件方法,根据指定的预处理标识符来判定是否编译(例如Debug和Trace)。例如[Conditional("DEBUG")]。
3)Obsolete: 用于标记弃用的元素。语法有[Obsolete(message)], [Obsolete(messge, iserror)]。message用于描述信息,iserror为true,表示为错误,为false,生成警告。且默认值为false。
二)自定义特性
自定义特性主要有四个步骤:声明自定义特性,构建自定义特性,元素上应用,通过反射访问特性。
自定义特性声明的类派生于Aystem.Attribute类。每个特性至少有一个构造函数。
二·反射
反射指程序可以访问,检测和修改它本身状态或行为的一种能力。程序集包含模块,模块包含类型,类型包含成员。反射可以提供封装的程序集,模块和类型的对象。
通过反射创建类型实例,再将该类型绑定到对象,从对象中获取类型,或调用类型的方法和自字段及属性。
PS:使用反射的优缺点:
优点:反射提高了程序的灵活性和拓展性;降低了耦合性;允许程序创建和控制任何类的对象,不需要提前硬编码目标类。
缺点:反射是一种解释操作,比直接使用代码要慢,因此反射机制主要应用于灵活性和拓展性要求高的系统框架上。同时使用反射,会导致程序内部逻辑模糊,无法直观的看到代码的逻辑。
反射主要查看特性(attribute)信息。System.Reflection类的MemberInfo对象,可以定义为目标类的对象。通过GetCustomAttributes()获取到目标类的特性。
本文介绍了C#中的特性(Attribute)和反射的概念。特性是一种用于标记程序元素行为的标签,包括预定义特性如AttributeUsage、Conditional和Obsolete,以及如何自定义特性。反射则允许程序动态访问和修改自身状态,通过反射可以获取类型信息、创建对象并调用方法。文中还讨论了反射的优缺点,强调其在提高灵活性和降低耦合性的同时,可能导致性能损失和代码可读性下降。
985

被折叠的 条评论
为什么被折叠?



