Freigeben über


Erstellen benutzerdefinierter Attribute

Sie können eigene benutzerdefinierte Attribute erstellen, indem Sie eine Attributklasse definieren, eine Klasse, die direkt oder indirekt von Attributedieser abgeleitet wird, wodurch die Identifizierung von Attributdefinitionen in Metadaten schnell und einfach ist. Angenommen, Sie möchten Typen mit dem Namen des Programmierers markieren, der den Typ geschrieben hat. Sie können eine benutzerdefinierte Author Attributklasse definieren:

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct)
]
public class AuthorAttribute : System.Attribute
{
    private string Name;
    public double Version;

    public AuthorAttribute(string name)
    {
        Name = name;
        Version = 1.0;
    }
}

Der Klassenname AuthorAttribute ist der Name Authordes Attributs und das Attribute Suffix. Es wird von System.Attributeabgeleitet, daher ist es eine benutzerdefinierte Attributklasse. Die Parameter des Konstruktors sind die Positionsparameter des benutzerdefinierten Attributs. In diesem Beispiel name handelt es sich um einen Positionsparameter. Alle öffentlichen Lese-/Schreibfelder oder -eigenschaften sind benannte Parameter. In diesem Fall version ist der einzige benannte Parameter. Beachten Sie die Verwendung des AttributeUsage Attributs, um das Author Attribut nur für Klassen und struct Deklarationen gültig zu machen.

Sie können dieses neue Attribut wie folgt verwenden:

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

AttributeUsage hat einen benannten Parameter, AllowMultiple, mit dem Sie ein benutzerdefiniertes Attribut als einmalig oder mehrfach verwendbar festlegen können. Im folgenden Codebeispiel wird ein Attribut mit mehrfacher Verwendung erstellt.

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct,
                       AllowMultiple = true)  // Multiuse attribute.
]
public class AuthorAttribute : System.Attribute
{
    string Name;
    public double Version;

    public AuthorAttribute(string name)
    {
        Name = name;

        // Default value.
        Version = 1.0;
    }

    public string GetName() => Name;
}

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

[Author("P. Ackerman"), Author("R. Koch", Version = 2.0)]
public class ThirdClass
{
    // ...
}

Siehe auch