ダイアログ ボックス (Visual Basic)
Imports ステートメントを追加して認識されない型名を定義すると、コードの意味に他の変更が生じるとコンパイラが判断した場合、[インポート検証の追加エラー] ダイアログ ボックスが表示されます。 具体的には、次のイベントが発生します。
コンパイラは、コードに含まれる型名が未定義であることを報告します。
型名は、プロジェクト内またはプロジェクトから参照されるアセンブリ内で定義されていますが、定義が存在する名前空間または名前空間要素 (クラスやモジュールなど) がスコープ外です。
ユーザーは、[スマート コンパイル自動修正] で提示されるオプションの一覧から選択し、名前空間または名前空間要素をインポートして問題を解決します。
コンパイラはファイルをチェックし、Imports ステートメントを追加するとファイル内の他の変数またはメソッドのバインディングが変化すると判断します。
[インポート検証の追加エラー] ダイアログ ボックスには、この問題を解決するための次のオプションがあります。
要素 |
説明 |
namespace をインポートし、該当する識別子を修飾する |
Imports namespace ステートメントをファイルに挿入します。 ファイルに定義されていなくても namespace に定義されている各型名は、インポートされた名前空間での定義にバインドされます。 これは、エラーが発生した型名のすべての出現箇所に適用されます。 ファイル内で既に定義されていて、この Imports ステートメントによって変化する型名については、元の意味を維持するために、必要な名前空間名、モジュール名、またはクラス名がそれぞれの前に付加されます。 |
namespace をインポートせずに、typeName を namespace.typeName に変更する |
未定義の型名を namespace.typeName に変更して、型名の定義の場所を指定します。 この変更は、未定義の型名の現在のインスタンスに対してのみ行われます。 ファイルの他の部分は変更されません。 |
[キャンセル] |
ダイアログ ボックスを閉じます。 |
例
ConsoleApplication1 という名前の Visual Basic コンソール アプリケーション プロジェクトの次のコードでは、C2 クラスの定義が Main で使用されるときにスコープ外になるため、エラーが発生します。
Imports ConsoleApplication1.Ns2
Module Module1
Sub Main()
Dim instance1 As New C1
' The following line will show an error for C2. C2 is defined
' in namespace Ns1, but only Ns2 is imported.
Dim instance2 As New C2
End Sub
End Module
' Namespace Ns1 defines two classes, C1 and C2.
Namespace Ns1
Class C1
End Class
Class C2
End Class
End Namespace
' Namespace Ns2 defines one class, C1.
Namespace Ns2
Class C1
End Class
End Namespace
マウス ポインターを Main の C2 の上に置き、[エラー修正のオプション] の感嘆符をクリックします。 問題を修正するための 2 つのオプションが表示されます。
Import ConsoleApplication1.Ns1
Change 'C2' to 'Ns1.C2'
エラー修正のオプション
2 番目のオプションを選択すると、コードで C2 が Ns1.C2 に変更されて、エラーが解決されます。 C2 の現在のインスタンスのみが変更されます。
1 番目のオプションを選択した場合、この例では状況がさらに複雑になります。 コンパイラは、Imports ステートメントを追加するとコードの意味に他の変化が生じることを検出し、[インポート検証の追加エラー] ダイアログ ボックスを表示します。 具体的には、インポートするConsoleApplication.Ns1との問題を修正するにはC2、新しいエラーが発生C1の最初の行でMain:Dim instance1 As New C1. 2 つの定義クラスのC1現在スコープ内にあります。名前空間で定義されているNs1と名前空間で定義されているNs2。
[インポート検証の追加エラー] ダイアログ ボックスには 2 つの選択肢があります。
'ConsoleApplication1.Ns1' をインポートし、該当する識別子を修飾する
'ConsoleApplication1.Ns1' をインポートせず、'C2' を 'Ns1.C2' に変更する
[インポート検証の追加エラー] ダイアログ ボックス
1 番目のオプションを選択すると、Imports ConsoleApplication1.Ns1 がファイルの先頭に追加され、Dim instance1 As New C1 が Dim instance1 As New ConsoleApplication1.Ns2.C1 に変更されて、C1 の元のバインディングが維持されます。
注意
この解決方法は、未定義の型名がファイル内の多くの場所に出現する場合、または名前空間の他の要素が役に立つと考えられる場合に適しています。
2 番目のオプションを選択すると、コードで C2 が Ns1.C2 に変更されて、エラーが解決されます。 C2 の現在のインスタンスのみが変更されます。
注意
この限定的な解決方法は、未定義の型名がファイル内で 1 回か 2 回しか使用されていない場合、または型名が定義されている名前空間が大きい場合に推奨されます。
参照
参照
Imports ステートメント (.NET 名前空間および型)
[インポート検証の追加エラー] (拡張メソッド) ダイアログ ボックス (Visual Basic)