次の方法で共有


共通属性 (Visual Basic)

このトピックでは、Visual Basic プログラムで最もよく使用される属性について説明します。

グローバル属性

ほとんどの属性は、クラスやメソッドなどの特定の言語要素に適用されます。ただし、一部の属性はグローバルであり、アセンブリまたはモジュール全体に適用されます。 たとえば、 AssemblyVersionAttribute 属性を使用して、次のようにバージョン情報をアセンブリに埋め込むことができます。

<Assembly: AssemblyVersion("1.0.0.0")>

グローバル属性は、最上位レベルの Imports ステートメントの後、および型、モジュール、または名前空間の宣言の前に、ソース コードに表示されます。 グローバル属性は複数のソース ファイルに含めることができますが、ファイルは 1 つのコンパイル パスでコンパイルする必要があります。 Visual Basic プロジェクトの場合、グローバル属性は通常、AssemblyInfo.vb ファイルに配置されます (Visual Studio でプロジェクトを作成すると、ファイルが自動的に作成されます)。

アセンブリ属性は、アセンブリに関する情報を提供する値です。 これらは次のカテゴリに分類されます。

  • アセンブリ ID 属性

  • 情報属性

  • アセンブリ マニフェスト属性

アセンブリ ID 属性

アセンブリの ID は、名前、バージョン、カルチャの 3 つの属性 (該当する場合は厳密な名前) によって決まります。 これらの属性はアセンブリの完全な名前を形成し、コードで参照するときに必要です。 属性を使用して、アセンブリのバージョンとカルチャを設定できます。 ただし、名前の値は、アセンブリ マニフェストを含むファイルに基づいて、アセンブリの作成時にコンパイラ、 アセンブリ情報ダイアログ ボックスの Visual Studio IDE、またはアセンブリ リンカー (Al.exe) によって設定されます。 AssemblyFlagsAttribute属性は、アセンブリの複数のコピーを共存できるかどうかを指定します。

次の表に、ID 属性を示します。

特性 目的
AssemblyName アセンブリの ID を完全に記述します。
AssemblyVersionAttribute アセンブリのバージョンを指定します。
AssemblyCultureAttribute アセンブリがサポートするカルチャを指定します。
AssemblyFlagsAttribute アセンブリが、同じコンピューター、同じプロセス、または同じアプリケーション ドメインでの並列実行をサポートするかどうかを指定します。

情報属性

情報属性を使用して、アセンブリの追加の会社または製品情報を提供できます。 次の表に、 System.Reflection 名前空間で定義されている情報属性を示します。

特性 目的
AssemblyProductAttribute アセンブリ マニフェストの製品名を指定するカスタム属性を定義します。
AssemblyTrademarkAttribute アセンブリ マニフェストの商標を指定するカスタム属性を定義します。
AssemblyInformationalVersionAttribute アセンブリ マニフェストの情報バージョンを指定するカスタム属性を定義します。
AssemblyCompanyAttribute アセンブリ マニフェストの会社名を指定するカスタム属性を定義します。
AssemblyCopyrightAttribute アセンブリ マニフェストの著作権を指定するカスタム属性を定義します。
AssemblyFileVersionAttribute Win32 ファイル バージョン リソースに特定のバージョン番号を使用するようにコンパイラに指示します。
CLSCompliantAttribute アセンブリが共通言語仕様 (CLS) に準拠しているかどうかを示します。

アセンブリ マニフェスト属性

アセンブリ マニフェスト属性を使用して、アセンブリ マニフェストに情報を提供できます。 これには、タイトル、説明、既定のエイリアス、構成が含まれます。 次の表に、 System.Reflection 名前空間で定義されているアセンブリ マニフェスト属性を示します。

特性 目的
AssemblyTitleAttribute アセンブリ マニフェストのアセンブリ タイトルを指定するカスタム属性を定義します。
AssemblyDescriptionAttribute アセンブリ マニフェストのアセンブリの説明を指定するカスタム属性を定義します。
AssemblyConfigurationAttribute アセンブリ マニフェストのアセンブリ構成 (リテールやデバッグなど) を指定するカスタム属性を定義します。
AssemblyDefaultAliasAttribute アセンブリ マニフェストのわかりやすい既定のエイリアスを定義します

廃止された属性

Obsolete属性は、プログラム エンティティを使用することが推奨されなくなったエンティティとしてマークします。 古いエンティティを使用するたびに、属性の構成方法に応じて、警告またはエラーが生成されます。 例えば次が挙げられます。

<System.Obsolete("use class B")>
Class A
    Sub Method()
    End Sub
End Class

Class B
    <System.Obsolete("use NewMethod", True)>
    Sub OldMethod()
    End Sub

    Sub NewMethod()
    End Sub
End Class

この例では、 Obsolete 属性はクラス A とメソッド B.OldMethodに適用されます。 B.OldMethodに適用される属性コンストラクターの 2 番目の引数はtrueに設定されているため、このメソッドはコンパイラ エラーを引き起こしますが、クラス Aを使用すると警告が生成されます。 しかし、B.NewMethod の呼び出しでは、警告もエラーも生成されません。

属性コンストラクターの最初の引数として指定された文字列は、警告またはエラーの一部として表示されます。 たとえば、前の定義でこれを使用すると、次のコードで 2 つの警告と 1 つのエラーが生成されます。

' Generates 2 warnings:
' Dim a As New A
' Generate no errors or warnings:

Dim b As New B
b.NewMethod()

' Generates an error, terminating compilation:
' b.OldMethod()

クラス A の警告が 2 つ生成されます。1 つはクラス参照の宣言の警告で、もう 1 つはクラス コンストラクターの警告です。

Obsolete属性は引数なしで使用できますが、項目が古い理由と代わりに使用する内容の説明を含めて使用することをお勧めします。

Obsolete 属性は、1 回だけ使用できる属性であり、属性を使用できる任意のエンティティに適用できます。 ObsoleteObsoleteAttribute の別名です。

条件付き属性

Conditional 属性を使用すると、プリプロセス識別子に依存したメソッドの実行を指定できます。 Conditional 属性は ConditionalAttribute の別名であり、メソッドまたは属性クラスに適用できます。

この例では、 Conditional をメソッドに適用して、プログラム固有の診断情報の表示を有効または無効にします。

#Const TRACE_ON = True
Imports System.Diagnostics

Module TestConditionalAttribute
    Public Class Trace
        <Conditional("TRACE_ON")>
        Public Shared Sub Msg(ByVal msg As String)
            Console.WriteLine(msg)
        End Sub

    End Class

    Sub Main()
        Trace.Msg("Now in Main...")
        Console.WriteLine("Done.")
    End Sub
End Module

TRACE_ON識別子が定義されていない場合、トレース出力は表示されません。

Conditional属性は、デバッグ ビルドのトレース機能とログ機能を有効にするために、DEBUG識別子と共に使用されることが多いですが、次のようなリリース ビルドでは使用されません。

<Conditional("DEBUG")>
Shared Sub DebugMethod()

End Sub

条件付きとしてマークされたメソッドが呼び出されると、指定した前処理シンボルの有無によって、呼び出しが含まれるか省略されるかが決まります。 シンボルが定義されている場合は呼び出しが実行され、定義されていない場合は省略されます。 Conditionalの使用は、次のように、#if…#endif ブロック内のメソッドを囲む代わりに、よりクリーンでエレガントで、エラーが発生しやすい代替手段です。

#If DEBUG Then
    Sub ConditionalMethod()
    End Sub
#End If

条件付きメソッドは、クラスまたは構造体宣言のメソッドである必要があり、戻り値を持つ必要はありません。

複数の識別子の使用

メソッドに複数の Conditional 属性がある場合、少なくとも 1 つの条件付きシンボルが定義されている場合は、メソッドの呼び出しが含まれます (つまり、シンボルは OR 演算子を使用して論理的にリンクされます)。 この例では、 A または B のいずれかが存在すると、メソッド呼び出しが発生します。

<Conditional("A"), Conditional("B")>
Shared Sub DoIfAorB()

End Sub

AND 演算子を使用してシンボルを論理的にリンクする効果を実現するには、シリアル条件付きメソッドを定義できます。 たとえば、次の 2 番目のメソッドは、 AB の両方が定義されている場合にのみ実行されます。

<Conditional("A")>
Shared Sub DoIfA()
    DoIfAandB()
End Sub

<Conditional("B")>
Shared Sub DoIfAandB()
    ' Code to execute when both A and B are defined...
End Sub

属性クラスでの条件付きの使用

Conditional 属性は、属性クラスの定義にも適用できます。 この例では、カスタム属性 Documentation は、DEBUG が定義されている場合にのみメタデータに情報を追加します。

<Conditional("DEBUG")>
Public Class Documentation
    Inherits System.Attribute
    Private text As String
    Sub New(ByVal doc_text As String)
        text = doc_text
    End Sub
End Class

Class SampleClass
    ' This attribute will only be included if DEBUG is defined.
    <Documentation("This method displays an integer.")>
    Shared Sub DoWork(ByVal i As Integer)
        System.Console.WriteLine(i)
    End Sub
End Class

呼び出し元情報の属性

呼び出し元情報属性を使用すると、メソッドの呼び出し元に関する情報を取得できます。 ソース コードのファイル パス、ソース コードの行番号、および呼び出し元のメンバー名を取得できます。

メンバーの呼び出し元情報を取得するには、省略可能なパラメーターに適用される属性を使用します。 各省略可能なパラメーターは既定値を指定します。 次の表に、 System.Runtime.CompilerServices 名前空間で定義されている呼び出し元情報属性を示します。

特性 説明 タイプ
CallerFilePathAttribute 呼び出し元を含むソース ファイルの完全なパス。 これはコンパイル時のパスです。 String
CallerLineNumberAttribute メソッドの呼び出し元のソース ファイル内の行番号。 Integer
CallerMemberNameAttribute 呼び出し元のメソッド名またはプロパティ名。 詳細については、「 呼び出し元情報 (Visual Basic)」を参照してください。 String
CallerArgumentExpressionAttribute 呼び出し元が引数に使用する式。 詳細については、「 呼び出し元情報 (Visual Basic)」を参照してください。 String

呼び出し元情報属性の詳細については、「 呼び出し元情報 (Visual Basic)」を参照してください。

Visual Basic 属性

次の表に、Visual Basic に固有の属性を示します。

特性 目的
ComClassAttribute クラスを COM オブジェクトとして公開する必要があることをコンパイラに示します。
HideModuleNameAttribute モジュールに必要な修飾のみを使用してモジュール メンバーにアクセスできるようにします。
VBFixedStringAttribute ファイル入力および出力関数で使用する構造体内の固定長文字列のサイズを指定します。
VBFixedArrayAttribute ファイル入力および出力関数で使用する構造体内の固定配列のサイズを指定します。

COMClassAttribute

COMClassAttributeを使用して、Visual Basic から COM コンポーネントを作成するプロセスを簡略化します。 COM オブジェクトは .NET Framework アセンブリとは大きく異なり、 COMClassAttributeを使用しない場合は、いくつかの手順に従って Visual Basic から COM オブジェクトを生成する必要があります。 COMClassAttributeでマークされたクラスの場合、コンパイラはこれらの手順の多くを自動的に実行します。

HideModuleNameAttribute

HideModuleNameAttributeを使用して、モジュールに必要な修飾のみを使用してモジュール メンバーにアクセスできるようにします。

VBFixedStringAttribute

VBFixedStringAttributeを使用して、Visual Basic で固定長文字列を強制的に作成します。 文字列は既定では可変長であり、この属性は文字列をファイルに格納する場合に便利です。 次のコードは、これを示しています。

Structure Worker
    ' The runtime uses VBFixedString to determine
    ' if the field should be written out as a fixed size.
    <VBFixedString(10)> Public LastName As String
    <VBFixedString(7)> Public Title As String
    <VBFixedString(2)> Public Rank As String
End Structure

VBFixedArrayAttribute

VBFixedArrayAttributeを使用して、サイズが固定されている配列を宣言します。 Visual Basic 文字列と同様に、配列は既定で可変長です。 この属性は、ファイルにデータをシリアル化または書き込むときに便利です。

こちらも参照ください