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.

Дополнительные сведения см. в статье Accessing Attributes by Using Reflection (Visual Basic) (Обращение к атрибутам с помощью отражения (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

См. также