Erstellen benutzerdefinierter Attribute (C#)

Sie können eigene benutzerdefinierte Attribute erstellen, indem Sie eine Attributklasse definieren. Dies ist eine Klasse, die direkt oder indirekt von <xref:System.Attribute> abgeleitet wird, was es einfach macht, schnell Attributdefinitionen in Metadaten zu identifizieren. Angenommen, Sie möchten Typen mit dem Namen des Programmierers markieren, der den Typ geschrieben hat. Sie definieren möglicherweise eine benutzerdefinierte Author-Attributklasse:

[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 ist der Attributname, Author. Er ist von System.Attribute abgeleitet, ist also eine benutzerdefinierte Attributklasse. Die Parameter des Konstruktors sind die Positionsparameter des benutzerdefinierten Attributs. In diesem Beispiel ist name ein Positionsparameter. Alle öffentlichen Lese-/Schreibfelder oder -Eigenschaften werden Parameter genannt. In diesem Fall ist version der einzige Parameter mit Namen. Beachten Sie die Verwendung des AttributeUsage-Attributs, um das Author-Attribut ausschließlich für Klassen- und struct-Deklarationen gültig zu machen.

Sie könnten dieses neue Attribut wie folgt verwenden:

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

AttributeUsage verfügt über einen Parameter, AllowMultiple, mit dem Sie ein benutzerdefiniertes Attribut zur einmaligen oder mehrfachen Nutzung erstellen können. Im folgenden Codebeispiel wird ein mehrfach verwendbares Attribut erstellt.

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

Wenn die Attributklasse eine Eigenschaft enthält, muss die Eigenschaft Lese- und Schreibberechtigung aufweisen.

Siehe auch

<xref:System.Reflection>
C#-Programmierhandbuch
Verfassen von benutzerdefinierten Attributen
Reflektion (C#)
Attribute (C#)
Accessing Attributes by Using Reflection (C#) (Zugriff auf Attribute mit Reflektion (C#))
AttributeUsage (C#)