暗黙的なデータ型変換を拡大変換のみに制限し、遅延バインディングを禁止し、 Object
型になる暗黙的な型指定を禁止します。
構文
Option Strict { On | Off }
部品
任期 | 定義 |
---|---|
On |
任意。
Option Strict チェックを有効にします。 |
Off |
任意。
Option Strict チェックを無効にします。 |
注釈
Option Strict On
またはOption Strict
がファイルに表示されると、次の条件によってコンパイル時エラーが発生します。
暗黙的な縮小変換
遅延バインディング
Object
型になる暗黙的な型指定
注
[コンパイル] ページのプロジェクト デザイナー (Visual Basic) で設定できる警告構成には、コンパイル時エラーの原因となる 3 つの条件に対応する 3 つの設定があります。 これらの設定の使用方法については、このトピックで後述する IDE で警告構成を設定するにはを 参照してください。
Option Strict Off
ステートメントは、関連する IDE 設定でこれらのエラーまたは警告を有効にするように指定されている場合でも、3 つの条件すべてについてエラーチェックと警告チェックをオフにします。
Option Strict On
ステートメントは、関連する IDE 設定でこれらのエラーまたは警告をオフにするように指定されている場合でも、3 つの条件すべてについてエラーチェックと警告チェックをオンにします。
使用する場合、 Option Strict
ステートメントは、ファイル内の他のコード ステートメントの前に記述する必要があります。
Option Strict
を On
に設定すると、Visual Basic では、すべてのプログラミング要素に対してデータ型が指定されていることを確認します。 データ型は、明示的に指定することも、ローカル型推論を使用して指定することもできます。 次の理由から、すべてのプログラミング要素にデータ型を指定することをお勧めします。
これにより、変数とパラメーターに対する IntelliSense のサポートが有効になります。 これにより、コードを入力するときに、プロパティとその他のメンバーを表示できます。
これにより、コンパイラは型チェックを実行できます。 型チェックは、型変換エラーのために実行時に失敗する可能性があるステートメントを見つけるのに役立ちます。 また、これらのメソッドをサポートしていないオブジェクトのメソッドの呼び出しも識別します。
コードの実行速度が向上します。 その理由の 1 つは、プログラミング要素のデータ型を指定しない場合、Visual Basic コンパイラによって
Object
型が割り当てられるということです。 コンパイル済みコードでは、Object
と他のデータ型の間でやり取りする必要があるため、パフォーマンスが低下します。
暗黙的な縮小変換エラー
暗黙的な縮小変換エラーは、縮小変換である暗黙的なデータ型変換がある場合に発生します。
Visual Basic では、多くのデータ型を他のデータ型に変換できます。 データ損失は、1 つのデータ型の値が、精度が低いデータ型または容量が小さいデータ型に変換された場合に発生する可能性があります。 このような縮小変換が失敗した場合、実行時エラーが発生します。
Option Strict
では、これらの縮小変換のコンパイル時通知が確実に行われるので、それらを回避できます。 詳細については、「 暗黙的および明示的な変換」および 「 拡大変換と縮小変換」を参照してください。
エラーの原因となる可能性のある変換には、式で発生する暗黙的な変換が含まれます。 詳細については、次のトピックを参照してください。
> 演算子を使用して文字列を連結すると、文字列へのすべての変換が拡大されていると見なされます。 そのため、これらの変換では、 Option Strict
がオンになっている場合でも、暗黙的な縮小変換エラーは生成されません。
対応するパラメーターとは異なるデータ型を持つ引数を持つメソッドを呼び出すと、縮小変換では、 Option Strict
がオンの場合にコンパイル時エラーが発生します。 拡大変換または明示的な変換を使用すると、コンパイル時エラーを回避できます。
暗黙的な縮小変換エラーは、 For Each…Next
コレクション内の要素からループ コントロール変数への変換のコンパイル時に抑制されます。 これは、 Option Strict
がオンになっている場合でも発生します。 詳細については、「 For Each..」の「縮小変換」セクションを参照してください。次のステートメント。
遅延バインディング エラー
オブジェクトは、 Object
型として宣言されている変数のプロパティまたはメソッドに割り当てられると遅延バインドされます。 詳細については、「 早期バインディングと遅延バインディング」を参照してください。
暗黙的なオブジェクト型エラー
暗黙的なオブジェクト型エラーは、宣言された変数に対して適切な型を推論できないため、 Object
の型が推論されるときに発生します。 これは主に、Dim
句を使用せずに As
ステートメントを使用して変数を宣言し、Option Infer
がオフの場合に発生します。 詳細については、「 Option Infer ステートメント 」および 「Visual Basic Language Specification」を参照してください。
メソッド パラメーターの場合、Option Strict
がオフの場合、As
句は省略可能です。 ただし、1 つのパラメーターで As
句を使用する場合は、すべて使用する必要があります。
Option Strict
がオンの場合は、すべてのパラメーター定義に対して As
句が必要です。
As
句を使用せずに変数を宣言し、Nothing
に設定すると、変数の型はObject
。 この場合、 Option Strict
がオンで、 Option Infer
がオンの場合、コンパイル時エラーは発生しません。 その例として、 Dim something = Nothing
があります。
既定のデータ型と値
次の表では、 Dim ステートメントでデータ型と初期化子を指定するさまざまな組み合わせの結果について説明します。
データ型が指定されましたか? | 初期化子が指定されましたか? | 例 | 結果 |
---|---|---|---|
いいえ | いいえ | Dim qty |
Option Strict がオフ (既定値) の場合、変数は Nothing に設定されます。Option Strict がオンの場合、コンパイル時エラーが発生します。 |
いいえ | イエス | Dim qty = 5 |
Option Infer がオン (既定値) の場合、変数は初期化子のデータ型を受け取ります。
「ローカル型の推論」を参照してください。Option Infer がオフで、Option Strict がオフの場合、変数はObject のデータ型を受け取ります。Option Infer がオフで、Option Strict がオンの場合は、コンパイル時エラーが発生します。 |
イエス | いいえ | Dim qty As Integer |
変数は、データ型の既定値に初期化されます。 詳細については、「 Dim ステートメント」を参照してください。 |
イエス | イエス | Dim qty As Integer = 5 |
初期化子のデータ型が指定したデータ型に変換できない場合は、コンパイル時エラーが発生します。 |
Option Strict ステートメントが存在しない場合
ソース コードに Option Strict
ステートメントが含まれていない場合は、[コンパイル] ページの [Option strict]\(オプション\) strict 設定 、プロジェクト デザイナー (Visual Basic) が使用されます。
コンパイル ページには、エラーを生成する条件をさらに制御できる設定があります。
コマンド ライン コンパイラを使用している場合は、 -optionstrict コンパイラ オプションを使用して、 Option Strict
の設定を指定できます。
IDE で Option Strict を設定するには
注
次の手順では、一部の Visual Studio ユーザー インターフェイス要素の名前や場所がコンピューターに異なる場合があります。 これらの要素は、使用している Visual Studio エディションと使用する設定によって決まります。 詳細については、「IDEのカスタマイズ」を参照してください。
ソリューション エクスプローラー で、プロジェクトを選択します。 [プロジェクト] メニューの [プロパティ] をクリックします。
[ コンパイル ] タブで、[ Option Strict ] ボックスの値を設定します。
IDE で警告構成を設定するには
Option Strict
ステートメントではなく、プロジェクト デザイナー (Visual Basic) のコンパイル ページを使用すると、エラーを生成する条件をさらに制御できます。
[コンパイル] ページの [警告の構成] セクションには、Option Strict
がオンのときにコンパイル時エラーが発生する 3 つの条件に対応する設定があります。 これらの設定を次に示します。
暗黙的な変換
遅延バインディング;呼び出しが実行時に失敗する可能性がある
暗黙的な型。object assumed
[Option Strict] を [オン] に設定すると、これらの 3 つの警告構成設定がすべて [エラー] に設定されます。 [オプションの厳格] を [オフ] に設定すると、3 つの設定がすべて [なし] に設定されます。
各警告構成設定は、個別に [なし]、[ 警告]、または [エラー] に変更できます。 3 つの警告構成設定がすべて [エラー] に設定されている場合は、[On
] ボックスにOption strict
が表示されます。 3 つすべてが [なし] に設定されている場合は、このボックス Off
表示されます。 これらの設定のその他の組み合わせの場合は、 (カスタム) が表示されます。
新しいプロジェクトの Option Strict の既定の設定を設定するには
プロジェクトを作成すると、[コンパイル] タブの [Option Strict] 設定が [オプション] ダイアログ ボックスの [Option Strict] 設定に設定されます。
このダイアログ ボックスで Option Strict
を設定するには、[ ツール ] メニューの [ オプション] をクリックします。 [ オプション ] ダイアログ ボックスで、[ プロジェクトとソリューション] を展開し、[ VB の既定値] をクリックします。
VB の既定値の初期設定はOff
です。
コマンド ラインで Option Strict を設定するには
vbc コマンドに -optionstrict コンパイラ オプションを含めます。
例 1
次の例では、変換を縮小する暗黙的な型変換によって発生するコンパイル時エラーを示します。 このエラーのカテゴリは、コンパイル ページの暗黙的な変換条件に対応します。
' If Option Strict is on, this implicit narrowing
' conversion causes a compile-time error.
' The commented statements below use explicit
' conversions to avoid a compile-time error.
Dim cyclists As Long = 5
Dim bicycles As Integer = cyclists
'Dim bicycles As Integer = CType(cyclists, Integer)
'Dim bicycles As Integer = CInt(cyclists)
'Dim bicycles As Integer = Convert.ToInt32(cyclists)
' If Option Strict is on, this implicit narrowing
' conversion causes a compile-time error.
' The commented statements below use explicit
' conversions to avoid a compile-time error.
Dim charVal As Char = "a"
'Dim charVal As Char = "a"c
'Dim charVal As Char = CType("a", Char)
' If Option Strict is on, a compile-time error occurs.
' If Option Strict is off, the string is implicitly converted
' to a Double, and then is added to the other number.
Dim myAge As Integer = "34" + 6
' If Option Strict is on, a compile-time error occurs.
' If Option Strict is off, the floating-point number
' is implicitly converted to a Long.
Dim num = 123.45 \ 10
例 2
次の例では、遅延バインディングによって発生するコンパイル時エラーを示します。 このエラーのカテゴリは、遅延バインディングに対応しています。呼び出しは、コンパイル ページの実行時の条件で失敗する可能性があります。
' If Option Strict is on, this late binding
' causes a compile-time error. If Option Strict
' is off, the late binding instead causes a
' run-time error.
Dim punchCard As New Object
punchCard.Column = 5
例 3
次の例は、暗黙的な型の Object
で宣言された変数によって発生するエラーを示しています。 このエラーのカテゴリは、コンパイル ページの暗黙的な型と見なされるオブジェクトの条件に対応します。
' If Option Strict is on and Option Infer is off,
' this Dim statement without an As clause
' causes a compile-time error.
Dim cardReaders = 5
' If Option Strict is on, a compile-time error occurs.
' If Option Strict is off, the variable is set to Nothing.
Dim dryWall
' If Option Strict is on, this parameter without an
' As clause causes a compile-time error.
Private Sub DetectIntergalacticRange(ByVal photonAttenuation)
End Sub
こちらも参照ください
.NET