Udostępnij za pośrednictwem


AttributeUsage (C# i Visual Basic)

Określa, w jaki sposób mogą być używane klasy atrybutu niestandardowego.AttributeUsagejest stosowany do kontroli, w jaki sposób można zastosować nowy atrybut definicji atrybutu niestandardowego atrybutu.Po zastosowaniu jawnie domyślne ustawienia wyglądać w następujący sposób:

    <System.AttributeUsage(System.AttributeTargets.All, 
                       AllowMultiple:=False, 
                       Inherited:=True)> 
    Class NewAttribute
        Inherits System.Attribute
    End Class

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

W tym przykładzie NewAttribute klasy mogą być stosowane do każdego podmiotu kod stanie atrybut, ale mogą być stosowane tylko raz do każdego podmiotu.Jest dziedziczony przez klas pochodnych, gdy jest stosowany do klasy podstawowej.

AllowMultiple i Inherited argumenty są opcjonalne, więc ten kod jest taki sam efekt:

<System.AttributeUsage(System.AttributeTargets.All)> 
Class NewAttribute
    Inherits System.Attribute
End Class
[System.AttributeUsage(System.AttributeTargets.All)]
class NewAttribute : System.Attribute { }

Pierwszy AttributeUsage argument musi być jeden lub więcej elementów z AttributeTargets wyliczania.Wiele typów docelowe mogą być połączone wraz z operatora OR w następujący sposób:

Imports System


...


<AttributeUsage(AttributeTargets.Property Or AttributeTargets.Field)> 
Class NewPropertyOrFieldAttribute
    Inherits Attribute
End Class
using System;


...


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

Jeśli AllowMultiple argumentu jest równa true, a następnie wynikowa atrybut można zastosować więcej niż raz do jeden podmiot, jak to:

Imports System


...


    <AttributeUsage(AttributeTargets.Class, AllowMultiple:=True)> 
    Class MultiUseAttr
        Inherits Attribute
    End Class

    <MultiUseAttr(), MultiUseAttr()> 
    Class Class1
    End Class

using System;


...


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

[MultiUseAttr]
[MultiUseAttr]
class Class1 { }

[MultiUseAttr, MultiUseAttr]
class Class2 { }

W tym przypadku MultiUseAttr mogą być stosowane wielokrotnie, ponieważ AllowMultiple jest ustawiona na true.Oba formaty dla stosowania wielu atrybutów wyświetlane są prawidłowe.

Jeśli Inherited jest ustawiona na false, a następnie atrybut nie jest dziedziczona przez klas, które są uzyskiwane z klasy, która jest przypisana.Na przykład:

Imports System


...


<AttributeUsage(AttributeTargets.Class, Inherited:=False)> 
Class Attr1
    Inherits Attribute
End Class

<Attr1()> 
Class BClass

End Class  

Class DClass
    Inherits BClass
End Class
using System;


...


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

[Attr1]
class BClass { }

class DClass : BClass { }

W tym przypadku Attr1 nie jest stosowane do DClass poprzez dziedziczenie.

Uwagi

AttributeUsage Atrybutu jest atrybutem jednorazowego użytku--nie można stosować w więcej niż raz do tej samej klasy.AttributeUsagejest aliasem dla AttributeUsageAttribute.

Aby uzyskać więcej informacji, zobacz Dostęp do atrybutów przy użyciu odbicia (C# i Visual Basic).

Przykład

Poniższy przykład demonstruje wpływ Inherited i AllowMultiple argumenty funkcji AttributeUsage atrybutu i w jaki sposób można wyliczyć atrybutów niestandardowych, stosowane do klasy.

Imports System


...


    ' Create some custom attributes:
    <AttributeUsage(System.AttributeTargets.Class, Inherited:=False)> 
    Class A1
        Inherits System.Attribute
    End Class

    <AttributeUsage(System.AttributeTargets.Class)> 
    Class A2
        Inherits System.Attribute
    End Class    

    <AttributeUsage(System.AttributeTargets.Class, AllowMultiple:=True)> 
    Class A3
        Inherits System.Attribute
    End Class


    ' Apply custom attributes to classes:
    <A1(), A2()> 
    Class BaseClass

    End Class

    <A3(), A3()> 
    Class DerivedClass
        Inherits BaseClass
    End Class


    Public Class TestAttributeUsage
        Sub Main()
            Dim b As New BaseClass
            Dim d As New DerivedClass
            ' Display custom attributes for each class.
            Console.WriteLine("Attributes on Base Class:")
            Dim attrs() As Object = b.GetType().GetCustomAttributes(True)

            For Each attr In attrs
                Console.WriteLine(attr)
            Next

            Console.WriteLine("Attributes on Derived Class:")
            attrs = d.GetType().GetCustomAttributes(True)
            For Each attr In attrs
                Console.WriteLine(attr)
            Next            
        End Sub
    End Class

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

Przykładowe dane wyjściowe

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

Zobacz też

Informacje

Odbicie (C# i Visual Basic)

Atrybuty (C# i Visual Basic)

Tworzenie niestandardowych atrybutów (C# i Visual Basic)

Dostęp do atrybutów przy użyciu odbicia (C# i Visual Basic)

Attribute

System.Reflection

Koncepcje

Podręcznik programowania C#

Inne zasoby

Podręcznik programowania Visual Basic

Rozszerzanie metadanych za pomocą atrybutów