AttributeUsage
是一個 C# 屬性,用于指定自定義屬性在代碼中的使用方式。它位于 System.ComponentModel
命名空間中。通過使用 AttributeUsage
,您可以控制屬性的重復使用、繼承和應用于哪些代碼元素(如類、方法、屬性等)。
以下是如何使用 AttributeUsage
的示例:
MyCustomAttribute
的屬性:using System;
[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public string MyProperty { get; set; }
public MyCustomAttribute(string myProperty)
{
MyProperty = myProperty;
}
}
在這個例子中,我們使用 AttributeUsage
指定了以下選項:
AttributeTargets.Method
:表示該屬性只能應用于方法。Inherited = false
:表示該屬性不可繼承。AllowMultiple = true
:表示該屬性可以應用于同一個元素多次。public class MyClass
{
[MyCustom("Hello, World!")]
public void MyMethod()
{
Console.WriteLine("This is my method.");
}
}
在這個例子中,我們將 MyCustomAttribute
應用于 MyMethod
方法。由于我們在 AttributeUsage
中設置了 AllowMultiple = true
,因此可以在同一個類中的其他方法上多次使用此屬性。
using System;
using System.Reflection;
public class Program
{
public static void Main()
{
Type type = typeof(MyClass);
MethodInfo method = type.GetMethod("MyMethod");
if (method.IsDefined(typeof(MyCustomAttribute), false))
{
var attributes = method.GetCustomAttributes(typeof(MyCustomAttribute), false) as MyCustomAttribute[];
foreach (var attribute in attributes)
{
Console.WriteLine($"MyCustomAttribute value: {attribute.MyProperty}");
}
}
}
}
在這個例子中,我們使用反射獲取 MyClass
類的 MyMethod
方法的信息,并檢查它是否定義了 MyCustomAttribute
。如果定義了該屬性,我們遍歷屬性數組并輸出屬性值。