Erstellen benutzerdefinierter Attribute (C#-Programmierhandbuch)

Aktualisiert: Juli 2008

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 Klassen und Strukturen mit dem Namen des Programmierers kennzeichnen, der sie geschrieben hat. Sie könnten beispielsweise eine benutzerdefinierte Author-Attributklasse definieren:

[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. Die Parameter des Konstruktors sind die positionellen Parameter des benutzerdefinierten Attributs (in diesem Fall name), und alle öffentlichen Felder oder Eigenschaften, die Lese- und Schreibzugriff unterstützen, sind benannte Parameter (in diesem Fall ist version der einzige benannte Parameter). Beachten Sie, dass das AttributeUsage-Attribut verwendet wird, um die Gültigkeit des Author-Attributs auf class- und struct-Deklarationen zu beschränken.

Das neue Attribut könnte wie folgt verwendet werden:

[Author("H. Ackerman", version = 1.1)]
class SampleClass
{
    // H. 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.

[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...
}
Hinweis:

Wenn die Attributklasse eine Eigenschaft enthält, muss diese Eigenschaft Lese-Schreib-Zugriff bieten. Lesegeschützte Eigenschaften in Attributklassen werden in C# nicht unterstützt.

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

Reflektion (C#-Programmierhandbuch)

Attribute (C#-Programmierhandbuch)

Verwenden von Attributen (C#-Programmierhandbuch)

Auflösen der Mehrdeutigkeit von Attributzielen (C#-Programmierhandbuch)

Zugriff auf Attribute mit Reflektion (C#-Programmierhandbuch)

System.Reflection

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Juli 2008

Hinweis zur Unterstützung von Eigenschaften hinzugefügt.

Korrektur inhaltlicher Fehler.