属性の適用
更新 : 2007 年 11 月
属性は、プロパティ、メソッド、イベント、クラス、アセンブリなどのプログラム要素に、属性ブロックを追加して適用します。属性ブロックは、山かっこ (< >) で囲んだコンマ区切りの属性の宣言リストで構成されます。属性の宣言は、Module、Assembly などの省略可能な属性修飾子、属性名、(通常オーバーロードされた) 必須の位置指定パラメータのリスト、および省略可能な名前付き引数のリストで構成されます。修飾子付きの属性は、ソース ファイルの先頭にある属性セクションに記述する必要があります。たとえば次のコードでは、アセンブリのタイトルを定義するアセンブリ属性と、モジュールが共通言語仕様 (CLS: Common Language Specification) 準拠であることを示すモジュール属性を設定しています。
Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"), _
Module: CLSCompliant(True)>
アセンブリ属性は、AssemblyInfo.vb ファイルを通じても適用できます。このファイルは、Visual Studio ユーザー インターフェイスによって自動的にプロジェクトに追加されます。このファイルには、既定値または Empty 値を持つアセンブリ レベルの属性が含まれています。
プロパティなどのプログラム要素に適用する場合は、そのプログラム要素の前に属性を置きます。たとえば、次のコードは属性をクラス定義に適用しています。
<CustomAttr(Update:=True)> Class Class1
規則として、属性名の終わりにはすべて "Attribute" が付きます。これにより、属性と .NET Framework の他の項目とを区別できます。ただし、属性を使用するときには、必ずしもこのサフィックスを使用する必要はありません。たとえば、CustomAttrAttribute という属性名の場合、<CustomAttr(Update:=True)> と指定しても <CustomAttrAttribute(Update:=True)> と指定しても同じです。
属性の引数
属性で省略可能な引数、必須の引数、位置指定引数、および名前付き引数を使用する方法は、オブジェクトでこれらの引数を使用する方法と同じです。位置指定引数は、属性のコンストラクタで宣言されている順に指定する引数です。たとえば、次のコードは、これらの 2 つの値を持つ属性の Sub New コンストラクタを呼び出します。
<CustomAttr(True, False)> Class Class1
属性クラスの Sub New に渡される引数は、多くの場合、フィールドやプロパティの値を初期化するために使用されます。
名前付き引数を使用すると、プロパティやフィールドの値を直接設定できます。名前付き引数を指定するには、引数の名前の後に ":=" および指定される値を付加します。位置指定引数とは異なり、名前付き引数は任意の順序で指定できます。たとえば、次のコードは Update フィールドに True を設定し、Keep フィールドに False を設定します。
<CustomAttr(Update:=True, Keep:=False)> Class Class1
メモ : |
---|
属性の引数と、標準メソッドの呼び出しで使用される引数には、重要な相違点が 1 つあります。属性クラスの Sub New コンストラクタで使用される引数には、位置指定引数を使用する必要があります。名前付き引数は、属性クラスのフィールドとプロパティの値を設定する場合にだけ使用できます。 |
必須の引数は、常に指定する必要がある引数です。省略可能な引数は、位置指定引数を使用するときに、コンマをプレースホルダに使用して省略できる引数や、名前付き引数を使用するときに単に省略できる引数です。
属性の引数は定数式であることが必要です。
属性の例
次のプロシージャは、属性の宣言の例です。
MarshalAs 属性を使用して、パラメータをマーシャリングする方法を制御するには
System.Runtime.InteropServices 名前空間の Imports ステートメントをソース コードの先頭に追加します。
Imports System.Runtime.InteropServices
パラメータに MarshalAsAttribute 属性のプリフィックスを付けて、必要なデータ型を指定します。たとえば、次のコードでは、2 つのパラメータを Windows API 関数用の文字列への long ポインタ データ型 (LPStr) としてマーシャリングします。
Declare Auto Sub CopyFile Lib "Kernel32.Lib" ( _ <MarshalAs(UnmanagedType.LPWStr)> ByVal existingfile As String, _ <MarshalAs(UnmanagedType.LPWStr)> ByVal newfile As String, _ ByVal failifexists As Boolean _ )
共通言語ランタイムは、MarshalAsAttribute 属性を使用して、Visual Basic のマネージ コードと Windows API 呼び出しのアンマネージ コード間で、パラメータがどのようにマーシャリングされるかを決定します。
リモート Web クライアントにメソッドを公開するには
[ファイル] メニューの [プロジェクト] をポイントし、[ASP.NET Web サービス] テンプレートをクリックします。System.Web 名前空間に Imports ステートメントを追加します。
Imports System.Web.Services
メソッドを定義し、WebMethodAttribute 属性を使用して、メソッドをリモートの Web クライアントから呼び出すことができるようにします。
<WebMethod()> Public Function HelloWorld() As String HelloWorld = "Hello World..." End Function
XML Web サービスのメソッドを Public に指定するだけでは、Web クライアントに公開したことにはなりません。リモート Web クライアントから呼び出すことができるようにするには、メソッドに WebMethodAttribute 属性を明示的に適用する必要があります。
参照
処理手順
概念
参照
Imports ステートメント (.NET 名前空間および型)