Dim ステートメント

Visual Studio .NET 2003

変数の格納領域を宣言および割り当てるために、モジュール、クラス、構造体、プロシージャ、ブロックの各レベルで使用します。

[ <attrlist> ] [{ Public | Protected | Friend | Protected Friend | Private | Static }] [ Shared ] [ Shadows ] [ ReadOnly ] Dim [ WithEvents ] name[ (boundlist) ] [ As [ New ] type ] [ = initexpr ]

指定項目

attrlist
省略できます。このステートメントで宣言する変数に適用される属性のリストを指定します。複数の属性を指定するときは、コンマ (,) で区切ります。
Public
省略できます。Public キーワードで宣言された変数は、パブリック アクセスを行います。パブリック変数のアクセシビリティには制約はありません。

Public を使用できるのは、モジュール、名前空間、またはファイル レベルだけです。つまり、パブリック変数は、ソース ファイル内、またはモジュール、クラス、構造体の中では宣言できますが、プロシージャの中では宣言できません。Public を指定する場合は、Dim キーワードを省略できます。

Protected
省略できます。Protected キーワードで宣言された変数は、プロテクト アクセスを行います。これらの値には、その独自のクラス、または派生クラスからだけアクセスできます。プロテクト アクセスはフレンド アクセスのスーパーセットではありません。

Protected を使用できるのはクラス レベルだけです。つまり、プロテクト変数はクラスの中では宣言できますが、プロシージャの中およびモジュール、名前空間、またはファイル レベルでは宣言できません。Protected キーワードは、クラス メンバの宣言だけに使用できます。Protected を指定する場合は、Dim キーワードを省略できます。

Friend
省略できます。Friend キーワードで宣言された変数は、フレンド アクセスを行います。これらの値には、宣言コンテキスト、および同じプログラム内のその他の場所からアクセスできます。

Friend を使用できるのは、モジュール、名前空間、またはファイル レベルだけです。つまり、フレンド変数は、ソース ファイル内、またはモジュール、クラス、構造体の中では宣言できますが、プロシージャの中では宣言できません。Friend を指定する場合は、Dim キーワードを省略できます。

Protected Friend
省略できます。Protected Friend キーワードで宣言された変数は、プロテクト アクセスおよびフレンド アクセスを行います。このような変数は、同じプログラム内のすべてのコード、変数自体のクラス内の任意のコード、およびすべての派生クラス内のコードで使用できます。

Protected Friend を使用できるのはクラス レベルだけです。つまり、プロテクト フレンド変数はクラスの中では宣言できますが、プロシージャの中およびモジュール、名前空間、またはファイル レベルでは宣言できません。Protected Friend キーワードは、クラス メンバの宣言だけに使用できます。Protected Friend を指定する場合は、Dim キーワードを省略できます。

Private
省略できます。Private キーワードで宣言された変数は、プライベート アクセスを行います。プロシージャのように入れ子になった型のメンバを含む、同じ宣言コンテキストでのみアクセスできます。

Private キーワードを使用できるのはモジュール レベルだけです。つまり、プライベート変数はモジュール、クラス、または構造体の中では宣言できますが、名前空間やファイル レベルまたはプロシージャでは宣言できません。Private を指定する場合は、Dim キーワードを省略できます。

Static
省略できます。Static キーワードで宣言された変数は、宣言されたプロシージャの終了後も存在し続け、最後に設定された値を保持します。

Static キーワードを使用できるのはプロシージャ レベルだけです。つまり、静的変数は、プロシージャ、またはプロシージャ内のブロックの中では宣言できますが、クラス レベルやモジュール レベルでは宣言できません。Static を指定する場合は、Dim キーワードを省略できます。

同じ変数宣言で Shared または Shadows と共に Static を指定することはできません。

Shared
省略できます。この変数が共有されることを示します。クラスや構造体の特定のインスタンスには関連付けられていません。共有変数にアクセスするには、クラス名や構造体名、またはクラスや構造体の特定インスタンスの変数名を使用して、共有変数を修飾します。

Shared を使用できるのは、モジュール、名前空間、またはファイル レベルだけです。つまり、共有変数は、ソース ファイル内、またはモジュール、クラス、構造体の中では宣言できますが、プロシージャの中では宣言できません。Shared を指定する場合は、Dim キーワードを省略できます。

同じ変数宣言内で StaticShared の両方を指定することはできません。

Shadows
省略できます。この変数が、基本クラスで同じ名前を持つプログラミング要素、またはオーバーロードされる要素をシャドウすることを示します。宣言された要素は、他の任意の種類の要素でシャドウできます。シャドウされた要素は、その要素をシャドウする派生クラスからは使用できません。ただし、シャドウする要素が、Private などのアクセスできない要素の場合は例外です。

Shadows キーワードを使用できるのは、モジュール、名前空間、またはファイル レベルだけです。つまり、シャドウイング変数は、ソース ファイル内、またはモジュール、クラス、構造体の中では宣言できますが、プロシージャの中では宣言できません。Shadows キーワードを指定する場合は、Dim キーワードを省略できます。

同じ変数宣言で StaticShadows の両方を指定することはできません。

ReadOnly
省略できます。ReadOnly キーワードで宣言された変数は、読み取ることだけができます。書き込むことはできません。このキーワードは、事前設定されたデータ メンバを持つオブジェクト変数など、参照型の定数メンバを作成するときに便利です。

ReadOnly を使用できるのは、モジュール、名前空間、またはファイル レベルだけです。つまり、読み取り専用変数は、ソース ファイル内、またはモジュール、クラス、構造体の中では宣言できますが、プロシージャの中では宣言できません。ReadOnly を指定する場合は、Dim キーワードを省略できます。

WithEvents
省略できます。name がイベントを発生できるクラスのインスタンスを参照するオブジェクト変数であることを指定するキーワードです。WithEvents では、それぞれの変数はいくつでも宣言できますが、配列を宣言することはできません。

WithEvents キーワードを使用する場合は、nameObject としては宣言できません。イベントを発生できる特定のクラスとして宣言する必要があります。

name
必ず指定します。変数の名前を指定します。有効な Visual Basic 識別子を指定する必要があります。name を変数ごとに指定し、boundlist を配列ごとに指定することで、同じ宣言ステートメントで変数をいくつでも宣言できます複数の変数を指定するときは、コンマ (,) で区切ります。

同じデータ型の複数の変数を宣言できます。また、変数や変数のグループごとにそれぞれ異なる型を指定することもできます。各変数は、name の後に来る最初の As 句で指定されたデータ型をとります。

boundlist
省略できます。配列変数の各次元の上限を表す、正の整数のリストを指定します。複数の上限値を指定するときは、コンマ (,) で区切ります。配列は最大 60 次元まで指定できます。

boundlist の各値は、1 つの次元の上限を指定するものであり、次元の長さは指定されません。下限は常に 0 であるため、各次元の添字は 0 から上限値までの数値になります。

-1 を使って配列の次元の上限を宣言できます。これは、配列が Nothing ではなく空であることを意味し、共通言語ランタイムの一部の関数では区別が必要です。ただし、Visual Basic のコードではこのような配列に正しくアクセスできません。アクセスしようとすると、実行時に IndexOutOfRangeException エラーが発生します。

New
省略できます。オブジェクトを即時に作成できるキーワードです。オブジェクト変数を宣言するときに New キーワードを指定すると、Dim ステートメントの実行時にオブジェクトのインスタンスが新規作成されます。
type
Option StrictOn になっていない限り省略できます。変数のデータ型を指定します。BooleanByteCharDateDecimalDoubleIntegerLongObjectShortSingleString のいずれかの型、または列挙体、構造体、クラス、インターフェイスのいずれかの名前を指定できます。定義する変数ごとに個別の As 句を使用する方法と、同じ型を持つ複数の変数を共通の As 句で定義する方法があります。

type を指定しない場合、変数は initexpr のデータ型をとります。type を指定する場合、initexpr のデータ型は type に変換できることが必要です。typeinitexpr のどちらも指定しない場合、既定のデータ型は Object になります。

initexpr
省略できます。変数の作成時に評価され、変数に割り当てられる式を指定します。同一の As 句で複数の変数を宣言する場合は、その変数グループに対して initexpr を指定することはできません。

attrlist 部分の属性は、次の構文と項目で指定します。

attrname [({ attrargs | attrinit })]

attrlist の指定項目

attrname
必ず指定します。属性の名前です。有効な Visual Basic 識別子を指定する必要があります。
attrargs
省略できます。この属性の位置の引数のリストです。複数の引数を指定するときは、コンマ (,) で区切ります。
attrinit
省略できます。この属性のフィールド初期化子またはプロパティ初期化子のリストです。複数の初期化子を指定するときは、コンマ (,) で区切ります。

解説

Dim キーワードで宣言された変数は、Dim ステートメントを含む領域内のすべてのコードで利用できます。Dim キーワードを使った変数がモジュール、クラス、または構造体の中、プロシージャの外で宣言される場合、これらの変数にはそのモジュール、クラス、または構造体のどこからでもアクセスできます。変数のアクセシビリティを詳細に指定するには、PublicProtectedFriendProtected Friend、または Private の各キーワードを指定します。

Private TryCount As IntegerProtected Salary As DecimalFriend ValidDate As DatePublic MaximumAllowed As DoubleProtected Friend CurrentUserName As String

プロシージャまたはブロックの中で宣言される変数には、そのプロシージャまたはブロック内部からだけアクセスできます。このような変数に対しては、いずれのアクセシビリティ キーワードも使用できません。これらの宣言ステートメントには、Dim または Static を使用する必要があります。

Dim Counter As IntegerStatic TotalSales As Double

Dim ステートメントを使うと、変数のデータ型を宣言し、その内容を初期化できます。宣言ステートメントで、Integer 変数、Boolean 変数、およびオブジェクト変数を宣言するコード例を次に示します。それぞれ 10、True、および System.Windows.Forms 名前空間の Label クラスに新規作成されるインスタンスに初期化されます。

Dim Quantity As Integer = 10Dim FirstTry As Boolean = TrueDim MyLabel As New System.Windows.Forms.Label

変数の初期値を指定しない場合、Visual Basic では変数を各データ型の既定値に初期化します。既定の初期値は次のとおりです。

  • Byte を含むすべての数値型の場合は 0。
  • Char の場合はバイナリの 0。
  • ObjectString、およびすべての配列を含む、すべての参照型の場合は、Nothing
  • Boolean の場合は False
  • Date の場合は、1 年 1 月 1 日 12:00 AM。

構造体または配列の各要素は、独立した変数として初期化されます。

初期値を中かっこ ({}) で囲むことで、配列の値を初期化できます。4 つの要素を持つ配列を作成するコード例は、次のとおりです。

Dim A1() As Integer = {0, 1, 2, 3}

多次元配列の場合は、各次元を中かっこで囲みます。要素は、行優先で指定されます。次に例を示します。

' Initialize each array element to its row index + its column index.Dim A2( , ) As Integer = {{0+0, 0+1, 0+2}, {1+0 ,1+1, 1+2}}
メモ   すべての宣言ステートメントは、モジュールやプロシージャなど、コード領域の先頭に配置します。宣言ステートメントが変数の値を初期化する場合は、他のステートメントがその変数への参照を作成する前に、初期化を実行する必要があります。

パブリック変数の場合は、事前バインディングも遅延バインディングも行うことができます。プロテクト、フレンド、およびプライベートの各変数については、遅延バインディングを行うことができません。つまり、遅延バインディングされたオブジェクト変数のメンバにアクセスするには、Public を宣言する必要があります。この場合、コンパイラはエラーを発生しませんが、実行時に MissingMemberException エラーが発生します。

静的変数の有効期間は、宣言されたプロシージャの有効期間よりも長くなります。変数の有効期間の境界は、プロシージャが宣言される場所、およびプロシージャが共有 (Shared) かどうかによって異なります。

  • プロシージャがモジュール内で宣言される場合、静的変数はそのプロシージャが最初に呼び出されるときに初期化され、プログラムの実行が終了するまで存在します。
  • プロシージャがクラスまたは構造体内で Shared として宣言される場合、静的変数は、そのプロシージャが特定のインスタンスで最初に呼び出されるとき、またはクラスか構造体自体で最初に呼び出されるときに初期化されます。静的変数はプログラムの実行が終了するまで存在します。
  • プロシージャがクラスまたは構造体内で宣言され Shared ではない場合、静的変数はクラスまたは構造体の個別のインスタンスに関連付けられます。静的変数は、プロシージャがそのインスタンス内で最初に呼び出されるときに初期化され、そのインスタンスが解放されるまで存在します。

Dim ステートメントを使って変数と配列を宣言するコード例は、次のとおりです。配列の添字の下限は常に 0 であり、上限は Dim ステートメントで設定される値です。

' Declarations do not have to initialize their variables.' AnyValue and MyValue are initialized by default to Nothing.Dim AnyValue, MyValue As Object' Number is initialized by default to 0.Dim Number As Integer' Multiple declarations can be of the same data type or different types.Dim FirstNumber, SecondNumber, ThirdNumber As IntegerDim MyDate As Date, MyValue As Single, MySwitch As Boolean' DayArray is an array of 51 Objects indexed from 0 through 50.Dim DayArray(50) As Object' Matrix2 is a two-dimensional array of type Integer.Dim Matrix2(3, 4) As Integer' Matrix3 is a three-dimensional array of type Double.Dim Matrix3(5, 9, 5) As Double' BirthDay is an array of 11 dates indexed from 0 through 10.Dim BirthDay(10) As Date' MyArray is an array of objects. The length of the array is assigned ' when another statement assigns an array object to MyArray.Dim MyArray() As Object

参照

表示: