AttributeUsage (Visual Basic)
カスタム属性クラスの使用方法を決定します。 AttributeUsage
は、カスタム属性の定義に適用して新しい属性の適用方法を制御できる属性です。 明示的に適用するときの既定の設定は次のようになります。
<System.AttributeUsage(System.AttributeTargets.All,
AllowMultiple:=False,
Inherited:=True)>
Class NewAttribute
Inherits System.Attribute
End Class
この例では、属性にできる任意のコード エンティティに NewAttribute
クラスを適用できますが、各エンティティに適用できるのは 1 回だけです。 基底クラスに適用すると、派生クラスによって継承されます。
AllowMultiple
引数と Inherited
引数は省略できるので、次のコードは同じ効果を持ちます。
<System.AttributeUsage(System.AttributeTargets.All)>
Class NewAttribute
Inherits System.Attribute
End Class
最初の AttributeUsage
引数は、AttributeTargets 列挙型の 1 つまたは複数の要素でなければなりません。 次のように、複数のターゲット型を OR 演算子で 1 つにまとめることができます。
<AttributeUsage(AttributeTargets.Property Or AttributeTargets.Field)>
Class NewPropertyOrFieldAttribute
Inherits Attribute
End Class
AllowMultiple
引数を true
に設定すると、次のように、結果の属性を 1 つのエンティティに複数回適用できます。
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=True)>
Class MultiUseAttr
Inherits Attribute
End Class
<MultiUseAttr(), MultiUseAttr()>
Class Class1
End Class
この例では、AllowMultiple
が true
に設定されているので、MultiUseAttr
を繰り返し適用できます。 示されているどちらの形式でも、複数の属性を適用できます。
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
に適用されません。
Remarks
AttributeUsage
属性は、1 回だけ使用できる属性です。同じクラスに複数回適用することはできません。 AttributeUsage
は AttributeUsageAttribute の別名です。
詳細については、「リフレクションを使用した属性へのアクセス (Visual Basic)」を参照してください。
例
次の例を見ると、AttributeUsage
属性に対する Inherited
引数と AllowMultiple
引数の効果、およびクラスに適用されているカスタム属性の列挙方法がわかります。
' 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
関連項目
.NET