1. 定制特性
a. 定制特性用[ ]放在目标元素(可以是类、方法、方法参数、字段等等)前面。
b. 显式制定特性的前缀,可以消除二义性
[assembly: attribute(1)] //应用于程序集上
[module: attribute(2)] //应用于模块上
[type: attribute(3)] //应用于类型上
[property: attribute(4)] //应用于属性上
[field: attribute(5)] //应用于字段上
[return: attribute(6)] //应用于返回值上
[param: attribute(7)] //应用于参数上
[method: attribute(8)] //应用于方法上
c. 例子:
[DllImport("Kernel32",CharSet=CharSet.Auto,SetLastError=true)]
"Kernel32"为定位参数,类似于一个类型构造函数的参数
后面两个为命名参数,类似于设置实例化后对象的字段或属性的,个数可选
d. 特性定义的格式
d.a 多个特性定义的格式
[Flags] [Serializable] 也可以 [Flags, Serializable]
d.b 特性名中的后缀Attribute是可选的
[FlagsAttribute] [SerializableAttribute]=[Flags] [Serializable]
d.c 没有参数的情况下括号可省略
[Flags] [Serializable] = [Flags()] [Serializable()]
2. 异常处理
finally 块中一般执行一些资源清理的操作,比如打开一个文件,在finally中关闭文件