AttributeUsage (C# i Visual Basic)
Określa, w jaki sposób mogą być używane klasy atrybutu niestandardowego.AttributeUsagejest stosowany do kontroli, w jaki sposób można zastosować nowy atrybut definicji atrybutu niestandardowego atrybutu.Po zastosowaniu jawnie domyślne ustawienia wyglądać w następujący sposób:
<System.AttributeUsage(System.AttributeTargets.All,
AllowMultiple:=False,
Inherited:=True)>
Class NewAttribute
Inherits System.Attribute
End Class
[System.AttributeUsage(System.AttributeTargets.All,
AllowMultiple = false,
Inherited = true)]
class NewAttribute : System.Attribute { }
W tym przykładzie NewAttribute klasy mogą być stosowane do każdego podmiotu kod stanie atrybut, ale mogą być stosowane tylko raz do każdego podmiotu.Jest dziedziczony przez klas pochodnych, gdy jest stosowany do klasy podstawowej.
AllowMultiple i Inherited argumenty są opcjonalne, więc ten kod jest taki sam efekt:
<System.AttributeUsage(System.AttributeTargets.All)>
Class NewAttribute
Inherits System.Attribute
End Class
[System.AttributeUsage(System.AttributeTargets.All)]
class NewAttribute : System.Attribute { }
Pierwszy AttributeUsage argument musi być jeden lub więcej elementów z AttributeTargets wyliczania.Wiele typów docelowe mogą być połączone wraz z operatora OR w następujący sposób:
Imports System
...
<AttributeUsage(AttributeTargets.Property Or AttributeTargets.Field)>
Class NewPropertyOrFieldAttribute
Inherits Attribute
End Class
using System;
...
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
class NewPropertyOrFieldAttribute : Attribute { }
Jeśli AllowMultiple argumentu jest równa true, a następnie wynikowa atrybut można zastosować więcej niż raz do jeden podmiot, jak to:
Imports System
...
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=True)>
Class MultiUseAttr
Inherits Attribute
End Class
<MultiUseAttr(), MultiUseAttr()>
Class Class1
End Class
using System;
...
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
class MultiUseAttr : Attribute { }
[MultiUseAttr]
[MultiUseAttr]
class Class1 { }
[MultiUseAttr, MultiUseAttr]
class Class2 { }
W tym przypadku MultiUseAttr mogą być stosowane wielokrotnie, ponieważ AllowMultiple jest ustawiona na true.Oba formaty dla stosowania wielu atrybutów wyświetlane są prawidłowe.
Jeśli Inherited jest ustawiona na false, a następnie atrybut nie jest dziedziczona przez klas, które są uzyskiwane z klasy, która jest przypisana.Na przykład:
Imports System
...
<AttributeUsage(AttributeTargets.Class, Inherited:=False)>
Class Attr1
Inherits Attribute
End Class
<Attr1()>
Class BClass
End Class
Class DClass
Inherits BClass
End Class
using System;
...
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
class Attr1 : Attribute { }
[Attr1]
class BClass { }
class DClass : BClass { }
W tym przypadku Attr1 nie jest stosowane do DClass poprzez dziedziczenie.
Uwagi
AttributeUsage Atrybutu jest atrybutem jednorazowego użytku--nie można stosować w więcej niż raz do tej samej klasy.AttributeUsagejest aliasem dla AttributeUsageAttribute.
Aby uzyskać więcej informacji, zobacz Dostęp do atrybutów przy użyciu odbicia (C# i Visual Basic).
Przykład
Poniższy przykład demonstruje wpływ Inherited i AllowMultiple argumenty funkcji AttributeUsage atrybutu i w jaki sposób można wyliczyć atrybutów niestandardowych, stosowane do klasy.
Imports System
...
' 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
using System;
...
// Create some custom attributes:
[AttributeUsage(System.AttributeTargets.Class, Inherited = false)]
class A1 : System.Attribute { }
[AttributeUsage(System.AttributeTargets.Class)]
class A2 : System.Attribute { }
[AttributeUsage(System.AttributeTargets.Class, AllowMultiple = true)]
class A3 : System.Attribute { }
// Apply custom attributes to classes:
[A1, A2]
class BaseClass { }
[A3, A3]
class DerivedClass : BaseClass { }
public class TestAttributeUsage
{
static void Main()
{
BaseClass b = new BaseClass();
DerivedClass d = new DerivedClass();
// Display custom attributes for each class.
Console.WriteLine("Attributes on Base Class:");
object[] attrs = b.GetType().GetCustomAttributes(true);
foreach (Attribute attr in attrs)
{
Console.WriteLine(attr);
}
Console.WriteLine("Attributes on Derived Class:");
attrs = d.GetType().GetCustomAttributes(true);
foreach (Attribute attr in attrs)
{
Console.WriteLine(attr);
}
}
}
Przykładowe dane wyjściowe
Attributes on Base Class:
A1
A2
Attributes on Derived Class:
A3
A3
A2
Zobacz też
Informacje
Tworzenie niestandardowych atrybutów (C# i Visual Basic)
Dostęp do atrybutów przy użyciu odbicia (C# i Visual Basic)