请解释 C# 中特性的概念,并说明如何定义自定义特性以及在代码中如何应用它们?
考察说明
考查对 C# 特性的理解及自定义特性的实践能力。
回答思路
- 【回答框架 1】特性是用于向程序元素(如类、方法、属性)添加元数据的类,继承自 System.Attribute。它通过声明式方式描述行为或信息,在运行时可通过反射访问。
- 【回答框架 2】自定义特性需继承 Attribute,并可选定义构造函数和属性,以存储元数据。使用 AttributeUsage 指定目标元素和继承性。
- 【回答框架 3】应用特性时,在元素前以方括号包裹特性类名(可省略 Attribute 后缀),并传入构造函数参数。
- 【回答框架 4】读取特性时,使用 Type/Assembly 的 GetCustomAttributes 方法,或通过反射获取成员信息后查找特性,再读取其属性值。
- 【回答框架 5】特性常用于序列化控制、编译指令、代码分析、框架集成等场景,如 Obsolete、Serializable 等内置特性。
- 【关键点 1】特性是元数据载体,本身不改变行为,需运行时解释。
- 【关键点 2】自定义特性必须继承 Attribute。
- 【关键点 3】AttributeUsage 控制应用目标和继承特性。
- 【关键点 4】通过反射 API 访问和读取特性信息。
- 【易错点 1】特性类名以 Attribute 结尾,应用时可省略,但反射时需全名。
- 【易错点 2】特性构造和属性参数必须是常量或编译时类型。
- 【易错点 3】特性不会自动影响程序逻辑,需显式处理。