AttributeUsage (C#)AttributeUsage (C#)

Bestimmt, wie eine benutzerdefinierte Attributklasse verwendet werden kann.Determines how a custom attribute class can be used. Bei AttributeUsageAttribute handelt es sich um ein Attribut, das Sie auf benutzerdefinierte Attributdefinitionen anwenden.AttributeUsageAttribute is an attribute you apply to custom attribute definitions. Mithilfe des AttributeUsage-Attribut können Sie Folgendes steuern:The AttributeUsage attribute enables you to control:

  • Auf welche Programmelemente das Attribut angewendet werden kann.Which program elements attribute may be applied to. Wenn Sie die Verwendung nicht einschränken, kann ein Attribut auf jedes der folgenden Programmelemente angewendet werden:Unless you restrict is usage, an attribute may be applied to any of the following program elements:
    • Assemblyassembly
    • Modulmodule
    • Feldfield
    • Ereignisevent
    • Methodemethod
    • Parameterparam
    • Eigenschaftproperty
    • Rückgabereturn
    • Typtype
  • Ob ein Attribut mehrfach auf ein einzelnes Programmelement angewendet werden kann.Whether an attribute can be applied to a single program element multiple times.
  • Ob Attribute von abgeleiteten Klassen geerbt werden.Whether attributes are inherited by derived classes.

Die Standardeinstellungen ähneln folgendem Beispiel, wenn Sie explizit angewendet werden:The default settings look like the following example when applied explicitly:

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

In diesem Beispiel kann die NewAttribute-Klasse auf jedes unterstützte Programmelement angewendet werden.In this example, the NewAttribute class can be applied to any supported program element. Es kann jedoch nur einmal auf jede Entität angewendet werden.But it can be applied only once to each entity. Wenn das Attribut auf eine Basisklasse angewendet wird, wird es an eine abgeleitete Klasse vererbt.The attribute is inherited by derived classes when applied to a base class.

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

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

Das erste AttributeUsageAttribute-Argument muss mindestens ein Element der AttributeTargets-Enumeration sein.The first AttributeUsageAttribute argument must be one or more elements of the AttributeTargets enumeration. Mehrere Zieltypen können wie im folgenden Beispiel dargestellt mithilfe des OR-Operators verknüpft werden:Multiple target types can be linked together with the OR operator, like the following example shows:

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

Ab C# 7.3 können Attribut auf das Eigenschaften- oder das Unterstützungsfeld einer automatisch implementierten Eigenschaft angewendet werden.Beginning in C# 7.3, attributes can be applied to either the property or the backing field for an auto-implemented property. Das Attribut wird auf die Eigenschaft angewendet, sofern Sie den field-Bezeichner des Attributs nicht angeben.The attribute applies to the property, unless you specify the field specifier on the attribute. Beides wird im folgenden Beispiel veranschaulicht:Both are shown in the following example:

class MyClass
{
    // Attribute attached to property:
    [NewPropertyOrField]
    public string Name { get; set; }

    // Attribute attached to backing field:
    [field:NewPropertyOrField]
    public string Description { get; set; }
}

Wenn das AllowMultiple-Argument auf true festgelegt ist, kann das daraus entstehende Attribut wie im folgenden Beispiel dargestellt mehr als einmal auf eine einzelne Entität angewendet werden:If the AllowMultiple argument is true, then the resulting attribute can be applied more than once to a single entity, as shown in the following example:

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

[MultiUse]
[MultiUse]
class Class1 { }

[MultiUse, MultiUse]
class Class2 { }

In diesem Fall kann MultiUseAttribute wiederholt angewendet werden, da AllowMultiple auf true festgelegt wurde.In this case, MultiUseAttribute 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 wurde, wird das Attribut nicht von Klassen geerbt, die von einer Attributklasse abgeleitet werden.If Inherited is false, then the attribute isn't inherited by classes derived from an attributed class. Zum Beispiel:For example:

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

[NonInherited]
class BClass { }

class DClass : BClass { }

In diesem Fall wird NonInheritedAttribute nicht durch Vererbung auf DClass angewendet.In this case NonInheritedAttribute isn't 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 can't 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 AttributeUsageAttribute 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 AttributeUsageAttribute attribute, and how the custom attributes applied to a class can be enumerated.

using System;

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

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

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

// Apply custom attributes to classes:
[First, Second]
class BaseClass { }

[Third, Third]
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:
FirstAttribute
SecondAttribute
Attributes on Derived Class:
ThirdAttribute
ThirdAttribute
SecondAttribute

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#)