C#中的反射、特性与动态编程
1. 特性相关
特性(包括大多数预定义特性)通常出现在类定义中。例如,SerializableAttribute对应于元数据表中的一个设置位,这使得它成为一个伪特性,即能在元数据表中设置位或字段的特性。
下面是SerializableAttribute的CIL示例:
beforefieldinit Person extends [mscorlib]System.Object { } // end of class Person通用特性的CIL示例如下:
.class private auto ansi beforefieldinit Person extends [mscorlib]System.Object { } // end of class Person2. 动态对象编程
C# 4.0引入动态对象简化了许多编程场景,并开启了一些以前无法实现的新场景。使用动态对象编程,开发者可以使用动态调度机制编写操作代码,运行时会在执行时解析这些操作,而非在编译时由编译器进行验证和绑定。
对象并非总是静态类型的,例如从XML/CSV文件、数据库表、Internet Explorer DOM、COM的IDispatch接口加载数据,或者调用动态语言(如IronPython对象)中的代码。C# 4.