共用方式為


建立自訂屬性 (C# 和 Visual Basic)

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

<System.AttributeUsage(System.AttributeTargets.Class Or 
                       System.AttributeTargets.Struct)> 
Public Class Author
    Inherits System.Attribute
    Private name As String
    Public version As Double
    Sub New(ByVal authorName As String)
        name = authorName
        version = 1.0
    End Sub
End Class
[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 是唯一的具名參數。 請注意,只有在類別與 struct (在 Visual Basic 中為 Structure) 宣告中才能利用 AttributeUsage 屬性讓 Author 屬性變成有效。

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

<Author("P. Ackerman", Version:=1.1)> 
Class SampleClass
    ' P. Ackerman's code goes here...
End Class
[Author("P. Ackerman", version = 1.1)]
class SampleClass
{
    // P. Ackerman's code goes here...
}

AttributeUsage 有一個具名參數 AllowMultiple,您可藉此將自訂屬性設為單次使用或多次使用。 下列程式碼範例會建立多次使用的屬性。

' multiuse attribute
<System.AttributeUsage(System.AttributeTargets.Class Or 
                       System.AttributeTargets.Struct, 
                       AllowMultiple:=True)> 
Public Class Author
    Inherits System.Attribute
[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct,
                       AllowMultiple = true)  // multiuse attribute
]
public class Author : System.Attribute

下列程式碼範例會將相同型別的多個屬性套用到類別。

<Author("P. Ackerman", Version:=1.1), 
Author("R. Koch", Version:=1.2)> 
Class SampleClass
    ' P. Ackerman's code goes here...
    ' R. Koch's code goes here...
End Class
[Author("P. Ackerman", version = 1.1)]
[Author("R. Koch", version = 1.2)]
class SampleClass
{
    // P. Ackerman's code goes here...
    // R. Koch's code goes here...
}
注意事項注意事項

如果您的屬性 (Attribute) 類別包含屬性 (Property),該屬性 (Property) 必須可讀寫。

請參閱

參考

反映 (C# 和 Visual Basic)

屬性 (C# 和 Visual Basic)

使用反映存取屬性 (C# 和 Visual Basic)

System.Reflection

AttributeUsage (C# 和 Visual Basic)

概念

C# 程式設計手冊

撰寫自訂屬性

其他資源

Visual Basic 程式設計手冊