Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Определяет, как можно использовать пользовательский класс атрибутов.
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