属性の適用

更新 : 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
5y0xyec6.alert_note(ja-jp,VS.90).gifメモ :

属性の引数と、標準メソッドの呼び出しで使用される引数には、重要な相違点が 1 つあります。属性クラスの Sub New コンストラクタで使用される引数には、位置指定引数を使用する必要があります。名前付き引数は、属性クラスのフィールドとプロパティの値を設定する場合にだけ使用できます。

必須の引数は、常に指定する必要がある引数です。省略可能な引数は、位置指定引数を使用するときに、コンマをプレースホルダに使用して省略できる引数や、名前付き引数を使用するときに単に省略できる引数です。

属性の引数は定数式であることが必要です。

属性の例

次のプロシージャは、属性の宣言の例です。

MarshalAs 属性を使用して、パラメータをマーシャリングする方法を制御するには

  1. System.Runtime.InteropServices 名前空間の Imports ステートメントをソース コードの先頭に追加します。

    Imports System.Runtime.InteropServices
    
  2. パラメータに 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 クライアントにメソッドを公開するには

  1. [ファイル] メニューの [プロジェクト] をポイントし、[ASP.NET Web サービス] テンプレートをクリックします。System.Web 名前空間に Imports ステートメントを追加します。

    Imports System.Web.Services
    
  2. メソッドを定義し、WebMethodAttribute 属性を使用して、メソッドをリモートの Web クライアントから呼び出すことができるようにします。

    <WebMethod()> Public Function HelloWorld() As String
        HelloWorld = "Hello World..."
    End Function
    

XML Web サービスのメソッドを Public に指定するだけでは、Web クライアントに公開したことにはなりません。リモート Web クライアントから呼び出すことができるようにするには、メソッドに WebMethodAttribute 属性を明示的に適用する必要があります。

参照

処理手順

方法 : 独自の属性を定義する

概念

Visual Basic における属性

属性の一般的な使用方法

位置と名前による引数渡し

参照

WebMethodAttribute

Imports ステートメント (.NET 名前空間および型)

MarshalAsAttribute

System.Web

その他の技術情報

Visual Basic におけるカスタム属性