AttributeUsage
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

AttributeUsage (C# und Visual Basic)

 

Bestimmt, wie eine benutzerdefinierte Attributklasse verwendet werden kann. AttributeUsage ist ein Attribut, das auf benutzerdefinierte Attributdefinitionen angewendet werden kann, um zu steuern, wie das neue Attribut angewendet werden kann.Die Standardeinstellungen sehen wie folgt aus, wenn sie explizit angewendet werden:

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

In diesem Beispiel kann die NewAttribute-Klasse auf jede attributfähige Codeentität angewendet werden. Allerdings kann sie nur einmal auf jede Entität angewendet werden.Bei Anwendung auf eine Basisklasse wird sie von abgeleiteten Klassen geerbt.

Das AllowMultiple-Argument und das Inherited-Argument sind optional. Somit hat dieser Code die gleiche Wirkung:

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

Das erste AttributeUsage-Argument muss aus einem oder mehreren Elementen der AttributeTargets-Enumeration bestehen.Mehrere Zieltypen können wie folgt mit dem OR-Operator verknüpft werden:

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

Wenn das AllowMultiple-Argument auf true festgelegt ist, dann kann das resultierende Attribut auf die folgende Weise mehrfach auf eine einzelne Entität angewendet werden:

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

[MultiUseAttr]
[MultiUseAttr]
class Class1 { }

[MultiUseAttr, MultiUseAttr]
class Class2 { }

In diesem Fall kann MultiUseAttr immer wieder übernommen werden, da AllowMultiple auf true festgelegt ist.Beide Formate, die für die Übernahme mehrerer Attribute gezeigt wurden, sind gültig.

Wenn Inherited auf false festgelegt ist, dann wird das Attribut nicht von Klassen geerbt, die von einer attributierten Klasse abgeleitet sind. Zum Beispiel:

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.

Das AttributeUsage-Attribut ist ein einmal verwendbares Attribut, es kann einer Klasse nur einmal zugeordnet werden. AttributeUsage ist ein Alias für AttributeUsageAttribute.

Weitere Informationen finden Sie unter Zugreifen auf Attribute mithilfe der Reflektion (C# und Visual Basic).

Das folgende Beispiel veranschaulicht den Effekt, den das Inherited-Argument und dasAllowMultiple-Argument auf das AttributeUsage-Attribut haben. Außerdem wird gezeigt, wie die auf eine Klasse angewendeten benutzerdefinierten Attribute aufgelistet werden können.

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);
        }
    }
}

Attributes on Base Class:
A1
A2
Attributes on Derived Class:
A3
A3
A2
Anzeigen:
© 2016 Microsoft