C#基础复习(四)特性和反射

        一·特性

        特性(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#基础复习,c#)