Erstellen benutzerdefinierter Attribute (C#)Creating Custom Attributes (C#)

Sie können eigene benutzerdefinierte Attribute erstellen, indem Sie eine Attributklasse definieren. Dies ist eine Klasse, die direkt oder indirekt von Attribute abgeleitet wird, was es einfach macht, schnell Attributdefinitionen in Metadaten zu identifizieren.You can create your own custom attributes by defining an attribute class, a class that derives directly or indirectly from Attribute, which makes identifying attribute definitions in metadata fast and easy. Angenommen, Sie möchten Typen mit dem Namen des Programmierers markieren, der den Typ geschrieben hat.Suppose you want to tag types with the name of the programmer who wrote the type. Sie definieren möglicherweise eine benutzerdefinierte Author-Attributklasse:You might define a custom Author attribute 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 ist der Attributname, Author.The class name is the attribute's name, Author. Er ist von System.Attribute abgeleitet, ist also eine benutzerdefinierte Attributklasse.It is derived from System.Attribute, so it is a custom attribute class. Die Parameter des Konstruktors sind die Positionsparameter des benutzerdefinierten Attributs.The constructor's parameters are the custom attribute's positional parameters. In diesem Beispiel ist name ein Positionsparameter.In this example, name is a positional parameter. Alle öffentlichen Lese-/Schreibfelder oder -Eigenschaften werden Parameter genannt.Any public read-write fields or properties are named parameters. In diesem Fall ist version der einzige Parameter mit Namen.In this case, version is the only named parameter. Beachten Sie die Verwendung des AttributeUsage-Attributs, um das Author-Attribut ausschließlich für Klassen- und struct-Deklarationen gültig zu machen.Note the use of the AttributeUsage attribute to make the Author attribute valid only on class and struct declarations.

Sie könnten dieses neue Attribut wie folgt verwenden:You could use this new attribute as follows:

[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.AttributeUsage has a named parameter, AllowMultiple, with which you can make a custom attribute single-use or multiuse. Im folgenden Codebeispiel wird ein mehrfach verwendbares Attribut erstellt.In the following code example, a multiuse attribute is created.

[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.In the following code example, multiple attributes of the same type are applied to a 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...  
}  

Hinweis

Wenn die Attributklasse eine Eigenschaft enthält, muss die Eigenschaft Lese- und Schreibberechtigung aufweisen.If your attribute class contains a property, that property must be read-write.

Siehe auchSee Also

System.Reflection
C#-ProgrammierhandbuchC# Programming Guide
Verfassen von benutzerdefinierten AttributenWriting Custom Attributes
Reflektion (C#)Reflection (C#)
Attribute (C#)Attributes (C#)
Accessing Attributes by Using Reflection (C#) (Zugriff auf Attribute mit Reflektion (C#))Accessing Attributes by Using Reflection (C#)
AttributeUsage (C#)AttributeUsage (C#)