AttributeUsage是一個特性,用于指定如何使用自定義特性。在C#中,可以通過AttributeUsage特性來指定自定義特性可以應用的目標類型和使用方式。
以下是AttributeUsage特性的使用示例:
using System;
// 自定義特性
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class CustomAttribute : Attribute
{
public string Name { get; set; }
public CustomAttribute(string name)
{
Name = name;
}
}
// 使用自定義特性
[Custom("ClassAttribute")]
public class MyClass
{
[Custom("MethodAttribute")]
public void MyMethod()
{
Console.WriteLine("Hello, World!");
}
}
class Program
{
static void Main(string[] args)
{
// 獲取類上的特性
var classAttributes = typeof(MyClass).GetCustomAttributes(typeof(CustomAttribute), false);
foreach (CustomAttribute attribute in classAttributes)
{
Console.WriteLine(attribute.Name);
}
// 獲取方法上的特性
var methodAttributes = typeof(MyClass).GetMethod("MyMethod").GetCustomAttributes(typeof(CustomAttribute), false);
foreach (CustomAttribute attribute in methodAttributes)
{
Console.WriteLine(attribute.Name);
}
}
}
在上面的示例中,我們定義了一個CustomAttribute特性,并使用AttributeUsage特性指定了該特性可以應用于類和方法。然后,在MyClass類和MyMethod方法上應用了CustomAttribute特性。
在Main方法中,我們使用反射獲取了MyClass類和MyMethod方法上的CustomAttribute特性,并輸出了特性的Name屬性值。
請注意,AttributeUsage特性的構造函數有兩個參數,第一個參數用于指定特性可以應用的目標類型(可以是一個或多個),第二個參數用于指定是否允許多次應用該特性。在示例中,我們指定了CustomAttribute特性可以應用于類和方法,并允許多次應用。