Const ステートメント (Visual Basic)

更新 : 2007 年 11 月

1 つ以上の定数を宣言および定義します。

[ <attributelist> ] [ accessmodifier ] [ Shadows ] 
Const constantlist

指定項目

  • attributelist
    省略可能です。このステートメントで宣言されるすべての定数に適用される属性のリストです。属性リストが山かっこ ("<" および ">") で囲まれている点に注意してください。

  • accessmodifier
    省略可能です。これらの定数にアクセスできるコードを指定するために使います。Public (Visual Basic)Protected (Visual Basic)Friend (Visual Basic)、Protected Friend、または Private (Visual Basic) を指定できます。

  • Shadows
    省略可能です。基本クラス内のプログラミング要素を宣言し直して隠ぺいする場合に使用します。「Shadows」を参照してください。

  • constantlist
    必ず指定します。このステートメントで宣言する定数のリストです。

    constant[ , constant ... ]

    constant の構文と指定項目は次のとおりです。

    constantname[ As datatype ] = initializer

    指定項目

    説明

    constantname

    必ず指定します。定数の名前を指定します。宣言された要素の名前 を参照してください。

    datatype

    Option Strict が On の場合は、必ず指定します。定数のデータ型を指定します。

    initializer

    必ず指定します。コンパイル時に評価して、定数に代入される式です。

解説

決して変わらない値がアプリケーションにある場合は、名前付き定数を定義してリテラル値の代わりに使用できます。名前は値よりも覚えるのが簡単です。定数を一度定義すると、コード内の多くの場所でそれを使用できます。その後のバージョンで値を定義し直すことが必要になった場合も、Const ステートメントを変更するだけで済みます。

Const は、モジュール レベルまたはプロシージャ レベルでのみ使用できます。つまり、変数の宣言コンテキストは、クラス、構造体、モジュール、プロシージャ、またはブロックであることが必要で、ソース ファイル、名前空間、インターフェイスでは宣言できません。詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。

ローカル定数 (プロシージャ内) のアクセス レベルは、既定で public になります。このような定数にはアクセス修飾子を指定できません。クラスおよびモジュールのメンバ定数 (プロシージャ外) のアクセス レベルは、既定で private になります。また、構造体のメンバ定数の既定のアクセスレベルは public です。アクセス修飾子を使用してこれらのアクセス レベルを調整できます。

規則

  • 宣言コンテキストモジュール レベルで宣言された、プロシージャの外側にある定数をメンバ定数といいます。つまり、それを宣言しているクラス、構造体、またはモジュールのメンバです。

    プロシージャ レベルで宣言された定数をローカル定数といいます。つまり、それを宣言しているプロシージャまはたブロックに対してローカルという意味です。

  • 属性属性を適用できるのはメンバ定数だけで、ローカル定数には適用できません。属性はアセンブリのメタデータに情報を提供しますが、これはローカル定数などの一時的な格納領域には意味がありません。

  • 修飾子既定では、すべての定数が Shared、Static、そして ReadOnly になります。定数を宣言するとき、これらのどのキーワードも指定できません。

    プロシージャ レベルでは、ローカル定数の宣言に Shadows またはアクセス修飾子を指定できません。

  • 複数の定数同じ宣言ステートメントに複数の定数を宣言するには、各定数ごとに constantname の指定項目を指定します。複数の定数を指定するときは、コンマ (,) で区切ります。

データ型のルール

  • データ型Const ステートメントでは、変数のデータ型を宣言できます。任意のデータ型、または列挙型の名前を指定できます。

  • 既定の型datatype を指定しない場合、定数のデータ型は initializer になります。datatype と initializer の両方を指定する場合は、initializer のデータ型を datatype と互換性のあるものにする必要があります。datatype と initializer のどちらも指定しない場合、既定のデータ型は Object になります。

  • **異なるデータ型。**複数の定数に異なるデータ型を指定するには、宣言する各変数に対して As 句を別々に指定します。ただし、共通の As 句を使って複数の定数を同じ型にすることはできません。

  • 初期化 すべての定数の値を、constantlist で初期化する必要があります。定数に代入するための式を指定するには、initializer を使用します。式にはリテラル、他の定義済みの定数、および定義済みの列挙体のメンバを自由に組み合わせることができます。算術演算子と論理演算子を使って、各要素を組み合わせることもできます。

    initializer では、変数または関数は使用できません。ただし、CByte や CShort などの変換キーワードは使用できます。また、AscW も使用できます。この場合には、定数の String 引数、または Char 引数を指定して、コンパイル時に計算できるようにします。

動作

  • スコープローカル定数には、そのプロシージャまたはブロックの内部からのみアクセスできます。メンバ定数にはそのクラス、構造体、またはモジュール内の任意の場所からアクセスできます。

  • 修飾 クラス、構造体、またはモジュールの外部のコードで使用する場合は、その名前でメンバ定数の名前を修飾する必要があります。プロシージャやブロックの外部のコードは、その内部にあるローカル定数を参照できません。

使用例

Const ステートメントを使って、リテラル値の代わりに使用する定数を宣言するコード例は、次のとおりです。

' The following statements declare constants. 
Const maximum As Long = 459
Public Const helpString As String = "HELP"
Private Const startValue As Integer = 5

データ型が Object である定数を定義すると、Visual Basic コンパイラはそれを Object 型ではなく、initializer 型にします。次の例では、定数 naturalLogBase のランタイム型は Decimal です。

Const naturalLogBase As Object = CDec(2.7182818284)
MsgBox("Run-time type of constant naturalLogBase is " & _
    naturalLogBase.GetType.ToString())

この例では、CStr を使用して Type を String に変換できないため、GetType 演算子 から返された Type オブジェクトの ToString メソッドが使用されます。

参照

概念

暗黙の型変換と明示的な型変換

組み込み定数と組み込み列挙型

参照

Enum ステートメント (Visual Basic)

#Const ディレクティブ

Dim ステートメント (Visual Basic)

ReDim ステートメント (Visual Basic)

データ型変換関数

Asc 関数、AscW 関数

その他の技術情報

Visual Basic の定数と列挙体