C# 特性(Attribute)


C# 特性(Attribute)是一种声明性标注,用于在程序代码中添加元数据信息,以支持在运行时进行异构性、搜索和动态解释。特性可以应用于类型、成员、程序集以及其他程序代码形式。

C# 特性由方括号“[]”定义,并附加到程序代码的元素上。例如:

[Serializable]
public class MyClass {
    // ...
}

在此示例中,“[Serializable]”是一个特性,它应用于“MyClass”类,指示该类是可序列化的。特性不会影响程序代码的实际运行,而是提供了一些额外的元数据信息,可以由运行时或其他应用程序使用。

C# 特性的使用方法

C# 特性可以应用于各种程序代码形式,包括类型、方法、属性、字段、事件和程序集等。以下是一些示例:

[Obsolete("Use NewMethod() instead.")]
public void OldMethod() {
    // ...
}

[Conditional("DEBUG")]
public void DebugMethod() {
    // ...
}

[MethodImpl(MethodImplOptions.Synchronized)]
public void SyncMethod() {
    // ...
}

[Assembly: AssemblyTitle("My Application")]
[Assembly: AssemblyDescription("This is my application.")]
[Assembly: AssemblyVersion("1.0.0.0")]

在此示例中,“[Obsolete]”特性指示旧方法已过时,应使用替代方法;“[Conditional]”特性指示仅在 DEBUG 模式下才编译该方法;“[MethodImpl]”特性指示方法应同步执行;以及“[assembly]”特性指示程序集的相关信息。

自定义 C# 特性

除了使用现有的 C# 特性之外,您还可以创建自己的自定义 C# 特性。要执行此操作,请声明一个类并附加 “Attribute” 后缀。以下是一个示例:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyCustomAttribute : Attribute {
    public string Name { get; set; }
    public int Age { get; set; }
}

在此示例中,“[AttributeUsage]”特性规定“MyCustomAttribute”可以应用于类或方法;“MyCustomAttribute”类定义了两个属性,分别是 Name 和 Age。

应用自定义特性的示例:

[MyCustom(Name = "John Doe", Age = 30)]
public class MyClass {
    [MyCustom(Name = "Jane Doe", Age = 25)]
    public void MyMethod() {
        // ...
    }
}

在此示例中,“[MyCustom]”特性应用于“MyClass”类和“MyMethod”方法,以指定名称和年龄的值。

总结

C# 特性提供了一种简单但强大的方法来添加广泛的元数据信息到程序代码中。您可以使用现有的 C# 特性或创建自己的自定义 C# 特性。特性可应用于类型、成员、程序集以及其他程序代码形式,以支持运行时异构性、搜索和动态解释。