属性は、メタデータまたは宣言型情報をコード (アセンブリ、型、メソッド、プロパティなど) と関連付けするための強力なメソッドを提供します。 属性をプログラム要素に関連付けると、リフレクションと呼ばれる手法を使用して、実行時にその属性を照会することができます。 詳細については、「 リフレクション (Visual Basic)」を参照してください。
属性には、次のプロパティがあります。
属性は、プログラムにメタデータを追加します。 メタデータ は、プログラムで定義されている型に関する情報です。 すべての .NET アセンブリには、アセンブリで定義されている型と型メンバーを記述するメタデータの指定されたセットが含まれています。 カスタム属性を追加して、必要な追加情報を指定できます。 詳細については、「 カスタム属性の作成 (Visual Basic)」を参照してください。
アセンブリ全体、モジュール、またはクラスやプロパティなどの小さなプログラム要素に 1 つ以上の属性を適用できます。
属性は、メソッドやプロパティと同じ方法で引数を受け取ることができます。
プログラムでは、リフレクションを使用して、独自のメタデータまたは他のプログラムのメタデータを調べることができます。 詳細については、「 リフレクションを使用した属性へのアクセス (Visual Basic)」を参照してください。
属性の使用
属性はほとんどの宣言に配置できますが、特定の属性によって有効な宣言の型が制限される場合があります。 Visual Basic では、属性は山かっこ (<>) で囲まれます。 適用先の要素の直前の同じ行に表示する必要があります。
この例では、SerializableAttribute 属性を使用して、クラスに特定の特性を適用します。
<System.Serializable()> Public Class SampleClass
' Objects of this type can be serialized.
End Class
属性 DllImportAttribute を持つメソッドは、次のように宣言されます。
Imports System.Runtime.InteropServices
<System.Runtime.InteropServices.DllImport("user32.dll")>
Sub SampleMethod()
End Sub
1 つの宣言に複数の属性を配置できます。
Imports System.Runtime.InteropServices
Sub MethodA(<[In](), Out()> ByVal x As Double)
End Sub
Sub MethodB(<Out(), [In]()> ByVal x As Double)
End Sub
一部の属性は、特定のエンティティに対して複数回指定できます。 このような multiuse 属性の例は、ConditionalAttributeです。
<Conditional("DEBUG"), Conditional("TEST1")>
Sub TraceMethod()
End Sub
注
慣例により、すべての属性名は "Attribute" という単語で終わり、.NET Framework 内の他の項目と区別されます。 ただし、コードで属性を使用する場合は、属性サフィックスを指定する必要はありません。 たとえば、 [DllImport]
は [DllImportAttribute]
と同じですが、 DllImportAttribute
は .NET Framework の属性の実際の名前です。
属性パラメーター
多くの属性にはパラメーターがあり、位置指定、名前なし、または名前付きにすることができます。 位置指定パラメーターは、特定の順序で指定する必要があり、省略することはできません。名前付きパラメーターは省略可能であり、任意の順序で指定できます。 位置指定パラメーターは、最初に指定されます。 たとえば、次の 3 つの属性は同等です。
<DllImport("user32.dll")>
<DllImport("user32.dll", SetLastError:=False, ExactSpelling:=False)>
<DllImport("user32.dll", ExactSpelling:=False, SetLastError:=False)>
最初のパラメーターである DLL 名は位置指定されており、常に先頭にきます。他のパラメーターには名前が付けられています。 この場合、両方の名前付きパラメーターの既定値は false であるため、省略できます。 既定のパラメーター値については、個々の属性のドキュメントを参照してください。
属性ターゲット
属性の ターゲット は、属性が適用されるエンティティです。 たとえば、属性は、クラス、特定のメソッド、またはアセンブリ全体に適用できます。 既定では、属性は前の要素に適用されます。 ただし、属性がメソッドに適用されているか、パラメーターに適用されるか、戻り値に適用されるかなどを明示的に識別することもできます。
属性ターゲットを明示的に識別するには、次の構文を使用します。
<target : attribute-list>
使用可能な target
値の一覧を次の表に示します。
ターゲット値 | 対象 |
---|---|
assembly |
アセンブリ全体 |
module |
現在のアセンブリ モジュール (Visual Basic モジュールとは異なります) |
次の例は、アセンブリとモジュールに属性を適用する方法を示しています。 詳細については、「 共通属性 (Visual Basic)」を参照してください。
Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"),
Module: CLSCompliant(True)>
属性の一般的な用途
次の一覧には、コードでの属性の一般的な使用方法をいくつか示します。
Web サービスの
WebMethod
属性を使用してメソッドをマーキングし、SOAP プロトコル経由でメソッドを呼び出し可能にすることを示します。 詳細については、WebMethodAttributeを参照してください。ネイティブ コードと相互運用するときにメソッド パラメーターをマーシャリングする方法について説明します。 詳細については、MarshalAsAttributeを参照してください。
クラス、メソッド、インターフェイスの COM プロパティについて説明します。
DllImportAttribute クラスを使用してアンマネージ コードを呼び出す。
タイトル、バージョン、説明、または商標の観点からアセンブリを記述する。
永続化のためにシリアル化するクラスのメンバーを記述する。
XML シリアル化のためにクラス メンバーと XML ノード間でマップする方法について説明します。
メソッドのセキュリティ要件について説明します。
セキュリティの適用に使用される特性の指定。
Just-In-Time (JIT) コンパイラによる最適化の制御により、コードのデバッグが容易になります。
メソッドへの呼び出し元に関する情報の取得。
関連セクション
詳細については、以下を参照してください。
こちらも参照ください
.NET