建立自訂屬性 (C# 程式設計手冊)

更新: 2008 年 7 月

您可以藉由定義屬性類別來建立自己的自訂屬性,屬性類別是一種直接或間接從 Attribute 衍生的類別,可以在中繼資料中快速且容易地辨識屬性定義。假設您想要利用撰寫類別或結構的程式設計人員的名字來標記類別與結構。您或許可以定義自訂的 Author 屬性類別:

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct)
]
public class Author : System.Attribute
{
    private string name;
    public double version;

    public Author(string name)
    {
        this.name = name;
        version = 1.0;
    }
}

這個類別名稱是 Author 屬性的名稱。由於是從 System.Attribute 衍生,所以這是自訂的屬性類別。這個建構函式的參數是自訂屬性的位置參數,在此案例中為 name,而任何公用的可讀寫欄位或者屬性都是具名參數,在這個案例中,version 是唯一的具名參數。請注意,只有在 class 與 struct 宣告中才能利用 AttributeUsage 屬性讓 Author 屬性變成有效。

您可透過下列方式使用這項新的屬性:

[Author("H. Ackerman", version = 1.1)]
class SampleClass
{
    // H. Ackerman's code goes here...
}

AttributeUsage 有一個具名參數 AllowMultiple,您可藉此將自訂屬性設為單次使用或多次使用。

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct,
                       AllowMultiple = true)  // multiuse attribute
]
public class Author : System.Attribute
[Author("H. Ackerman", version = 1.1)]
[Author("M. Knott", version = 1.2)]
class SampleClass
{
    // H. Ackerman's code goes here...
    // M. Knott's code goes here...
}
注意事項:

如果您的屬性 (Attribute) 類別包含屬性 (Property),該屬性 (Property) 必須可讀寫。C# 中的屬性 (Attribute) 類別不支援唯寫屬性 (Property)。

請參閱

概念

C# 程式設計手冊

參考

反映 (C# 程式設計手冊)

屬性 (C# 程式設計手冊)

使用屬性 (C# 程式設計手冊)

明示屬性目標 (C# 程式設計手冊)

使用反映存取屬性 (C# 程式設計手冊)

System.Reflection

變更記錄

日期

記錄

原因

2008 年 7 月

加入有關屬性支援的備註。

內容 Bug 修正。