AttributeUsage (C#)AttributeUsage (C#)

Bestimmt, wie eine benutzerdefinierte Attributklasse verwendet werden kann.Determines how a custom attribute class can be used. AttributeUsage ist ein Attribut, dass auf benutzerdefinierte Attributdefinitionen zur Steuerung der Anwendung neuer Attribute angewendet werden kann.AttributeUsage is an attribute that can be applied to custom attribute definitions to control how the new attribute can be applied. Die Standardeinstellungen sehen wie folgt aus, wenn Sie explizit angewendet werden:The default settings look like this when applied explicitly:

[System.AttributeUsage(System.AttributeTargets.All,  
                   AllowMultiple = false,  
                   Inherited = true)]  
class NewAttribute : System.Attribute { }  

In diesem Beispiel kann die Klasse NewAttribute auf jede attributfähige Codeentität angewendet werden; allerdings nur einmal pro Entität.In this example, the NewAttribute class can be applied to any attribute-able code entity, but can be applied only once to each entity. Wenn sie auf eine Basisklasse angewendet wird, wird sie an eine abgeleitete Klasse vererbt.It is inherited by derived classes when applied to a base class.

Die Argumente AllowMultiple und Inherited sind optional, sodass dieser Code die gleiche Wirkung hat:The AllowMultiple and Inherited arguments are optional, so this code has the same effect:

[System.AttributeUsage(System.AttributeTargets.All)]  
class NewAttribute : System.Attribute { }  

Das erste AttributeUsage-Argument muss mindestens ein Element der AttributeTargets-Enumeration sein.The first AttributeUsage argument must be one or more elements of the AttributeTargets enumeration. Mehrere Zieltypen können mithilfe des OR-Operator wie folgt verknüpft werden:Multiple target types can be linked together with the OR operator, like this:

using System;  

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]  
class NewPropertyOrFieldAttribute : Attribute { }  

Wenn das AllowMultiple-Argument auf true festgelegt ist, kann das daraus entstehende Attribut wie folgt mehr als einmal auf eine einzelne Entität angewendet werden:If the AllowMultiple argument is set to true, then the resulting attribute can be applied more than once to a single entity, like this:

using System;  

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]  
class MultiUseAttr : Attribute { }  

[MultiUseAttr]  
[MultiUseAttr]  
class Class1 { }  

[MultiUseAttr, MultiUseAttr]  
class Class2 { }  

In diesem Fall kann MultiUseAttr wiederholt angewendet werden, da AllowMultiple auf true festgelegt ist.In this case MultiUseAttr can be applied repeatedly because AllowMultiple is set to true. Beide gezeigten Formate für das Anwenden von mehreren Attributen sind gültig.Both formats shown for applying multiple attributes are valid.

Wenn Inherited auf false festgelegt ist, wird das Attribut nicht an die von der attribuierten Klasse abgeleiteten Klassen vererbt.If Inherited is set to false, then the attribute is not inherited by classes that are derived from a class that is attributed. Zum Beispiel:For example:

using System;  

[AttributeUsage(AttributeTargets.Class, Inherited = false)]  
class Attr1 : Attribute { }  

[Attr1]  
class BClass { }  

class DClass : BClass { }  

In diesem Fall wird Attr1 nicht durch Vererbung auf DClass angewendet.In this case Attr1 is not applied to DClass via inheritance.

HinweiseRemarks

Das AttributeUsage-Attribut ist für die einmalige Nutzung bestimmt; es kann nicht mehr als einmal auf dieselbe Klasse angewendet werden.The AttributeUsage attribute is a single-use attribute--it cannot be applied more than once to the same class. AttributeUsage ist ein Alias für AttributeUsageAttribute.AttributeUsage is an alias for AttributeUsageAttribute.

Weitere Informationen finden Sie unter Accessing Attributes by Using Reflection (C#) (Zugriff auf Attribute mit Reflektion (C#)).For more information, see Accessing Attributes by Using Reflection (C#).

BeispielExample

In folgendem Beispiel wird die Wirkung der Argumente Inherited und AllowMultiple auf das Attribut AttributeUsage und die Enumeration benutzerdefinierter Attribute veranschaulicht, die auf eine Klasse angewendet wurden.The following example demonstrates the effect of the Inherited and AllowMultiple arguments to the AttributeUsage attribute, and how the custom attributes applied to a class can be enumerated.

using System;  

// Create some custom attributes:  
[AttributeUsage(System.AttributeTargets.Class, Inherited = false)]  
class A1 : System.Attribute { }  

[AttributeUsage(System.AttributeTargets.Class)]  
class A2 : System.Attribute { }  

[AttributeUsage(System.AttributeTargets.Class, AllowMultiple = true)]  
class A3 : System.Attribute { }  

// Apply custom attributes to classes:  
[A1, A2]  
class BaseClass { }  

[A3, A3]  
class DerivedClass : BaseClass { }  

public class TestAttributeUsage  
{  
    static void Main()  
    {  
        BaseClass b = new BaseClass();  
        DerivedClass d = new DerivedClass();  

        // Display custom attributes for each class.  
        Console.WriteLine("Attributes on Base Class:");  
        object[] attrs = b.GetType().GetCustomAttributes(true);  
        foreach (Attribute attr in attrs)  
        {  
            Console.WriteLine(attr);  
        }  

        Console.WriteLine("Attributes on Derived Class:");  
        attrs = d.GetType().GetCustomAttributes(true);  
        foreach (Attribute attr in attrs)  
        {  
            Console.WriteLine(attr);  
        }  
    }  
}  

BeispielausgabeSample Output

Attributes on Base Class:  
A1  
A2  
Attributes on Derived Class:  
A3  
A3  
A2  

Siehe auchSee Also

Attribute
System.Reflection
C#-ProgrammierhandbuchC# Programming Guide
AttributeAttributes
Reflektion (C#)Reflection (C#)
AttributeAttributes
Erstellen benutzerdefinierter Attribute (C#)Creating Custom Attributes (C#)
Accessing Attributes by Using Reflection (C#) (Zugriff auf Attribute mit Reflektion (C#))Accessing Attributes by Using Reflection (C#)