在C#中,特性(Attributes)是一种声明式的信息,用于添加元数据(metadata)到程序的源代码中。特性可以应用于程序元素(如类、方法、属性等),并且可以在运行时通过反射来检索这些信息。特性通常用于提供关于代码的附加信息,以及在运行时进行自定义处理。

以下是一些关于 C# 特性的基本知识:

1. 定义特性:
   [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
   public class MyCustomAttribute : Attribute
   {
       public string Description { get; set; }

       public MyCustomAttribute(string description)
       {
           Description = description;
       }
   }

   在上述例子中,MyCustomAttribute 是一个自定义特性类,它继承自 Attribute 类。

2. 应用特性:
   [MyCustom("This is a sample class")]
   class MyClass
   {
       [MyCustom("This is a sample method")]
       public void MyMethod()
       {
           // Method implementation
       }
   }

   在上述例子中,MyClass 类和 MyMethod 方法都应用了自定义特性 MyCustomAttribute。

3. 检索特性信息:
   Type type = typeof(MyClass);
   MyCustomAttribute classAttribute = (MyCustomAttribute)Attribute.GetCustomAttribute(type, typeof(MyCustomAttribute));

   MethodInfo method = type.GetMethod("MyMethod");
   MyCustomAttribute methodAttribute = (MyCustomAttribute)Attribute.GetCustomAttribute(method, typeof(MyCustomAttribute));

   使用反射,你可以在运行时获取应用于类型和成员的特性信息。

4. 内置特性:
   C# 中有一些内置的特性,例如:
   - [Obsolete]: 标记一个成员已过时。
   - [Serializable]: 标记一个类可以被序列化。
   - [Conditional]: 指定在调用方法时是否执行条件方法调用。
   [Obsolete("This method is deprecated. Use NewMethod instead.")]
   void OldMethod()
   {
       // Method implementation
   }

5. 多重特性:
   你可以为一个元素应用多个特性:
   [MyFirstAttribute]
   [MySecondAttribute]
   class MyClass
   {
       // Class implementation
   }

   在这个例子中,MyClass 类同时应用了 MyFirstAttribute 和 MySecondAttribute 特性。

特性为C#代码添加了元数据信息,使得在编译时和运行时可以进行更多的自定义处理。在实际应用中,特性经常用于实现代码分析、代码生成、依赖注入等场景。


转载请注明出处:http://www.zyzy.cn/article/detail/6361/C#