Erstellen benutzerdefinierter Attribute (C# und Visual Basic)

Sie können eigene benutzerdefinierte Attribute erstellen, indem Sie eine Attributklasse definieren. Dies ist eine Klasse, die direkt oder indirekt Elemente von Attribute ableitet, wodurch die schnelle und einfache Identifikation von Attributdefinitionen in Metadaten ermöglicht wird. Angenommen, Sie möchten Typen mit dem Namen des Programmierers kennzeichnen, der den Typ erstellt hat. Sie könnten beispielsweise eine benutzerdefinierte Author-Attributklasse definieren:

<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;
    }
}

Der Klassenname entspricht dem Attributnamen, also Author. Da er von System.Attribute abgeleitet ist, handelt es sich um eine benutzerdefinierte Attributklasse. Als Parameter des Konstruktors werden die Positionsparameter des benutzerdefinierten Attributs verwendet. In diesem Beispiel ist name ein Positionsparameter. Alle öffentlichen Schreib-Lese-Felder oder -Eigenschaften sind benannte Parameter. In diesem Fall ist version der einzige benannte Parameter. Das AttributeUsage-Attribut wird verwendet, um die Gültigkeit des Author-Attributs auf Klassen- und struct- (in Visual Basic Structure-)Deklarationen zu beschränken.

Das neue Attribut könnte wie folgt verwendet werden:

<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 verfügt über den benannten Parameter AllowMultiple, mit dem ein benutzerdefiniertes Attribut für die einfache oder mehrfache Verwendung konfiguriert werden kann. Im folgenden Codebeispiel wird ein mehrfach verwendbares Attribut erstellt.

' 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

Im folgenden Codebeispiel werden mehrere Attribute desselben Typs auf eine Klasse angewendet.

<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...
}

Tipp

Wenn die Attributklasse eine Eigenschaft enthält, muss diese Eigenschaft Lese-Schreib-Zugriff bieten.

Siehe auch

Referenz

Reflektion (C# und Visual Basic)

Attribute (C# und Visual Basic)

Zugreifen auf Attribute mithilfe der Reflektion (C# und Visual Basic)

System.Reflection

AttributeUsage (C# und Visual Basic)

Konzepte

C#-Programmierhandbuch

Verfassen von benutzerdefinierten Attributen

Weitere Ressourcen

Visual Basic-Programmierhandbuch