C# 面试题 目录

C# 中特性 (Attribute) 的概念和用法

推荐答案

-- -------------------- ---- -------
-- ---------
-------------------------------------- - ------------------------ ------------- - ------
------ ----- ----------------- - ---------
-
    ------ ------ ----------- - ---- ---- -

    ------ ------------------------ ------------
    -
        ----------- - ------------
    -
-

-- -------
------------------------
------ ----- -------
-
    -------------------------
    ------ ---- ----------
    -
        -- ----
    -
-

-- ----------
---- ---- - ----------------
--- --------------- - --------------------------------------------------- -------
------- ------------------ ---- -- ----------------
-
    -------------------------- ---------------------
-

--- ---------- - ---------------------------
--- ---------------- - --------------------------------------------------------- -------
------- ------------------ ---- -- -----------------
-
    --------------------------- ---------------------
-

本题详细解读

特性的概念

特性(Attribute)是C#中用于向程序元素(如类、方法、属性等)添加元数据的机制。元数据是描述数据的数据,特性可以用来为代码添加额外的信息,这些信息可以在运行时通过反射机制获取。

特性的用法

  1. 定义特性:通过继承 System.Attribute 类来定义自定义特性。可以使用 AttributeUsage 特性来指定自定义特性可以应用的目标(如类、方法等)以及是否允许多次应用。

  2. 应用特性:将自定义特性应用到类、方法、属性等程序元素上。特性可以带有参数,这些参数在特性构造函数中定义。

  3. 获取特性信息:通过反射机制,可以在运行时获取程序元素上的特性信息。使用 GetCustomAttributes 方法可以获取特定类型的特性实例。

示例代码解析

  • 定义特性MyCustomAttribute 是一个自定义特性类,继承自 Attribute。它包含一个 Description 属性,用于存储特性的描述信息。

  • 应用特性MyClass 类和 MyMethod 方法上分别应用了 MyCustomAttribute 特性,并传递了不同的描述信息。

  • 获取特性信息:通过 typeof(MyClass) 获取类的类型信息,然后使用 GetCustomAttributes 方法获取类和方法上的特性信息,并输出描述信息。

注意事项

  • 特性类通常以 Attribute 结尾,但在使用时可以省略 Attribute 后缀。
  • AttributeUsage 特性用于限制自定义特性的使用范围和行为,如 AllowMultiple 指定是否允许多次应用同一特性。
  • 反射机制是获取特性信息的主要手段,但反射操作可能会影响性能,应谨慎使用。
纠错
反馈