C# 编程指南:自定义特性(Custom Attributes)

在C#中,你可以创建自定义特性(Custom Attributes)来为代码元素添加元数据。自定义特性提供了一种灵活的方式来扩展和注解代码,以满足特定的需求。

部分
1
定义特性类
自定义特性类必须继承自System.Attribute类。
可以在特性类中定义属性、字段和方法来存储和操作元数据。
using System;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class CustomAttribute : Attribute
{
    public string Description { get; set; }

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

    public void PrintInfo()
    {
        Console.WriteLine("Custom Attribute Description: " + Description);
    }
}

在上述示例中,我们定义了一个名为CustomAttribute的自定义特性。它继承自System.Attribute类,并具有一个名为Description的属性和一个名为PrintInfo的方法。

部分
2
应用特性
使用方括号[]语法将特性应用于代码元素(类、方法、属性等)。
可以在同一代码元素上应用多个特性,通过设置AllowMultiple = true来允许多个实例。
[Custom("This is a custom attribute")]
public class MyClass
{
    [Custom("This is another custom attribute")]
    public void MyMethod()
    {
        // 方法体
    }
}

在上述示例中,我们将CustomAttribute特性应用于MyClass类和MyMethod方法。

部分
3
使用特性
可以使用反射来访问应用于代码元素的特性,并读取特性的属性和调用特性的方法。
using System;
using System.Reflection;

public class MyClass
{
    [Custom("This is a custom attribute")]
    public void MyMethod()
    {
        // 方法体
    }
}

public class Program
{
    static void Main(string[] args)
    {
        Type myClassType = typeof(MyClass);
        MethodInfo methodInfo = myClassType.GetMethod("MyMethod");
        var attributes = methodInfo.GetCustomAttributes(typeof(CustomAttribute), true);

        foreach (var attribute in attributes)
        {
            if (attribute is CustomAttribute customAttribute)
            {
                Console.WriteLine("Description: " + customAttribute.Description);
                customAttribute.PrintInfo();
            }
        }
    }
}

在上述示例中,我们使用反射获取MyMethod方法上的自定义特性。使用GetMethod方法获取MethodInfo对象,然后使用GetCustomAttributes方法获取应用于方法的CustomAttribute特性。 遍历特性集合,我们可以访问特性的属性和方法。 通过自定义特性,你可以为代码元素添加元数据,并根据需要读取和使用该元数据。这为你提供了一种扩展和注解代码的灵活机制。 请注意,自定义特性可以应用于各种代码元素(类、方法、属性等),并根据需要进行扩展。你可以根据自己的需求定义自定义特性,并按照上述示例中的方式使用它们。

    目录

  • 1.
    定义特性类
  • 2.
    应用特性
  • 3.
    使用特性