CTS通用类型系统(Commom Type System)
CLS通用语言规范(Commom Language Specification)
CTS和CLS是CLR的核心。
.Net会通过编译器把代码编译成.NET CLR能认识的metaData和IL代码
特性(Atrribute):是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号[]来描述的。
逻辑上,当编译器检测到向目标元素应用了定制特性时,会调用特性类的构造器,向它传递任何指定的参数,从而构造特性类的实例。然后编译器采用增强型构造器语法所指定的值,对任何公共字段和属性进行初始化。构造并初始化好特性类的对象之后,编译器将它的状态序列化到目标元素的元数据表记录项中。
属性(Property):实际上就是一个私有字段加上字段取值方法和字段复制方法(方法可以选择性开放或者不开放)
字段(Field):就是简单的字段变量
所以本文主要讲解一下特性:
特性在被编译器编译时,和传统的命令式代码不同,它会被以二进制数据的方式写入模块文件的元素据中,而在运行时的时候在被解读出来使用。所以特性也是经常被反射机制应用,因为特性本身就是以元素据的形式存放的。
自定义属性的限制特性: ①AttributeUsage(里面有三个比较常用的属性:①AttributeTargets(自定义特性的所用范围) ②Inherited(特性能否被继承) ③allowMultiple(能否多次使用))
自定义特性类的实例构造函数、字段和属性时,可供选择的数据类型并不多。只允许Boolean,Char,Byte,SByte,Int16,Int32,UInt32,Int64,UInt64,Single,Double,String,Type,Objec或枚举类型。此外,可使用上述任一类型的一维0基数组。单应尽量避免使用数组,因为对于定制特性,如果它的构造器要获取数组作为参数,就会失去与CLS的相容性。