C#面试题更新 2026-08-05

请解释 C# 中特性的概念,并说明如何定义自定义特性以及在代码中如何应用它们?

编码实现技术原理C#

考察说明

考查对 C# 特性的理解及自定义特性的实践能力。

回答思路

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