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
См. также
- Attribute
- System.Reflection
- Руководство по программированию на Visual Basic
- Атрибуты
- Reflection (Visual Basic) (Отражение (Visual Basic))
- Атрибуты (Visual Basic)
- Creating Custom Attributes (Visual Basic) (Создание настраиваемых атрибутов (Visual Basic))
- Accessing Attributes by Using Reflection (Visual Basic) (Обращение к атрибутам с помощью отражения (Visual Basic))