Поделиться через


AttributeUsage (Использование атрибутов) (Visual Basic)

Определяет, как можно использовать пользовательский класс атрибутов. AttributeUsage — это атрибут, который можно применить к пользовательским определениям атрибутов для управления применением нового атрибута. Параметры по умолчанию выглядят следующим образом при явном применении:

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

В этом примере NewAttribute класс может применяться к любой сущности кода с возможностью атрибутов, но может применяться только один раз к каждой сущности. Он наследуется производными классами при применении к базовому классу.

Аргументы AllowMultiple и Inherited являются необязательными, таким образом, этот код имеет тот же эффект:

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

Первый аргумент AttributeUsage должен состоять из одного или нескольких элементов перечисления AttributeTargets. Несколько целевых типов можно связать с оператором OR следующим образом:

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

AllowMultiple Если аргумент заданtrue, результирующий атрибут может применяться несколько раз к одной сущности, как показано ниже:

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

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

В этом случае MultiUseAttr можно многократно применять, так как AllowMultiple задано значение true. Для применения нескольких атрибутов допускаются оба показанных формата.

Если Inherited задано значение false, атрибут не наследуется классами, производными от класса, который является атрибутом. Рассмотрим пример.

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

<Attr1()>
Class BClass

End Class

Class DClass
    Inherits BClass
End Class

В этом случае Attr1 не применяется к DClass по наследованию.

Замечания

Атрибут AttributeUsage является атрибутом с одним использованием. Его нельзя применять несколько раз к одному классу. AttributeUsage является псевдонимом для AttributeUsageAttribute.

Дополнительные сведения см. в разделе "Доступ к атрибутам с помощью отражения" (Visual Basic).

Пример

В следующем примере показано влияние аргументов Inherited и AllowMultiple на атрибут AttributeUsage, а также как можно перечислить настраиваемые атрибуты, примененные к классу.

' 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

Образец вывода

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

См. также