创建和使用特性:
using System;
// 自定义特性类
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
public class MyCustomAttribute : Attribute
{
public string Description { get; }
public MyCustomAttribute(string description)
{
Description = description;
}
}
// 使用特性
[MyCustom("This is a class with a custom attribute")]
class MyClass
{
[MyCustom("This is a method with a custom attribute")]
public void MyMethod()
{
// 方法实现
}
}
内置特性:
C#提供了一些内置特性,用于标记程序中的元素,如 ObsoleteAttribute 用于标记过时的代码,SerializableAttribute 用于指示一个类可以序列化,等等。
using System;
// 使用内置特性
[Obsolete("This method is obsolete. Use NewMethod instead.")]
class MyClass
{
[Serializable]
public int MyProperty { get; set; }
}
获取特性信息:
在运行时,可以使用反射来获取有关类型和成员上的特性的信息。
using System;
using System.Reflection;
class Program
{
static void Main()
{
// 获取类上的特性信息
Type type = typeof(MyClass);
MyCustomAttribute classAttribute = (MyCustomAttribute)Attribute.GetCustomAttribute(type, typeof(MyCustomAttribute));
Console.WriteLine("Class Attribute: " + classAttribute.Description);
// 获取方法上的特性信息
MethodInfo methodInfo = type.GetMethod("MyMethod");
MyCustomAttribute methodAttribute = (MyCustomAttribute)Attribute.GetCustomAttribute(methodInfo, typeof(MyCustomAttribute));
Console.WriteLine("Method Attribute: " + methodAttribute.Description);
}
}
高级特性用法:
特性可以具有参数,也可以在运行时动态创建和使用。可以通过继承 System.Attribute 类来创建自定义特性,并根据需要添加属性和方法。
using System;
// 高级特性用法
[AttributeUsage(AttributeTargets.Property)]
public class MyValidationAttribute : Attribute
{
public string ErrorMessage { get; }
public MyValidationAttribute(string errorMessage)
{
ErrorMessage = errorMessage;
}
public bool IsValid(object value)
{
// 实现自定义验证逻辑
return /* validation logic */;
}
}
class MyClass
{
[MyValidation("Value must be greater than 0.")]
public int MyProperty { get; set; }
}
特性提供了一种灵活的方式来为程序元素添加元数据,这些元数据可以在运行时或设计时用于不同的目的,如代码分析、代码生成、文档生成等。
转载请注明出处:http://www.pingtaimeng.com/article/detail/14768/C#