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