Visual Basicでは、Importsキーワードを使用して名前空間を接続し、全階層を指定せずにクラスや機能にアクセスを簡略化します。これは特に大きなプロジェクトやサードパーティのライブラリを使用する際に重要です。
VBの初期バージョンでは、外部クラスの使用が、型への完全なパスを常に指定する必要があったために困難でした。名前空間とImports命令の登場により、開発者はライブラリの必要な部分を簡便にインポートできるようになり、作業が迅速化しました。
2つのライブラリに同じ名前の型が存在する場合、あいまいさのリスクが生じます。また、過剰な数のImports命令があると、名前の衝突や解決エラーが発生する可能性があります。
混乱を避けるために、Imports alias = Namespace.Type構文を使用してエイリアスを作成することをお勧めします。また、衝突が発生した場合は、コード内で型の完全な名前を明示的に指定します。
コードの例:
Imports System.Text Imports txt = System.Text Module Module1 Sub Main() Dim sb As New StringBuilder() txt.StringBuilder 'エイリアスを使用 End Sub End Module
主な特徴:
Imports命令は手続きやクラスの内部に配置できますか?
いいえ、Imports命令はファイルまたは名前空間レベルでのみ許可されており、手続き、関数、またはクラスの内部には配置できません。コードブロック内に配置すると、コンパイルエラーが発生します。
エイリアスなしに異なる名前空間の同じ型を使用した場合、どうなりますか?
解決できない名前の衝突にアクセスすると、コンパイラは「Type is ambiguous in the namespace」というエラーメッセージを表示します。完全なパスを明示的に指定するか、エイリアスを使用する必要があります。
Imports System.Drawing Imports MyProject.Drawing Sub Foo() Dim img As Image ' あいまいさのエラー Dim sysImg As System.Drawing.Image ' 正しい End Sub
Importsを使用して未登録のアセンブリから名前空間を接続できますか?
いいえ、Importsを使用する前に、アセンブリを「Add Reference」を通じてプロジェクトに追加する必要があります。これがないと、コンパイラは外部の名前空間を認識できません。
開発者はImports System.DataとImports System.Web.UI.WebControlsを同時にエイリアスなしで追加しました。その後、コード内でDataTableという名前の衝突が発生し、エラーの原因を特定するのに多くの時間を費やしました。
利点:
欠点:
別の開発者はImports DBTable = System.Data.DataTableというエイリアスを使用しており、他の名前空間に似た名前があっても、オブジェクトを明示的に区別することができます。
利点:
欠点: