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

请详细说明在 C# 中自定义属性的定义过程和使用方式,包括创建自定义 Attribute 类时需要继承哪个基类、如何应用该属性到代码元素,以及运行时如何通过反射读取属性信息。

考察说明

考查对 C# 自定义属性机制及反射读取流程的理解。

回答思路

  1. 【回答框架 1】自定义属性在 C# 中用于向程序元素添加元数据。定义时需要继承 System.Attribute 类,并按照约定在类名后添加 Attribute 后缀,以便编译器识别。
  2. 【回答框架 2】定义自定义属性时,可以通过 AttributeUsage 特性限制属性可应用的目标对象,如类、方法、属性等,还可以指定是否允许继承和是否允许多次应用。
  3. 【回答框架 3】使用自定义属性时,在目标元素前用方括号括起属性类名(可省略 Attribute 后缀),并传入构造函数参数或命名参数来初始化属性值。
  4. 【回答框架 4】运行时读取自定义属性需要使用反射 API,例如调用 Type.GetCustomAttributes 或 MemberInfo.GetCustomAttributes 方法,并转换为相应的属性类型,从而获取其属性值。
  5. 【回答框架 5】可以通过继承属性类或使用命名参数来扩展灵活性,但需注意构造函数参数与命名参数的使用区别以及性能影响。
  6. 【关键点 1】自定义属性必须继承自 System.Attribute 类。
  7. 【关键点 2】使用 AttributeUsage 控制应用目标和继承行为。
  8. 【关键点 3】通过反射(如 GetCustomAttributes)读取属性实例。
  9. 【关键点 4】属性命名以 Attribute 结尾,使用时省略后缀。
  10. 【易错点 1】自定义属性不包含业务逻辑,只存储元数据。
  11. 【易错点 2】反射读取属性有性能开销,高频场景需缓存。
  12. 【易错点 3】构造参数按位置传递,命名参数才可省略。