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

本文介绍了C#中的特性(Attribute)和反射的概念。特性是一种用于标记程序元素行为的标签,包括预定义特性如AttributeUsage、Conditional和Obsolete,以及如何自定义特性。反射则允许程序动态访问和修改自身状态,通过反射可以获取类型信息、创建对象并调用方法。文中还讨论了反射的优缺点,强调其在提高灵活性和降低耦合性的同时,可能导致性能损失和代码可读性下降。

        一·特性

        特性(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()获取到目标类的特性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值