Namespace ステートメント

更新 : 2007 年 11 月

名前空間の名前を宣言し、後続のソース コードがその名前空間内にコンパイルされるようにします。

Namespace { name | name.name }
    [ componenttypes ]
End Namespace

指定項目

  • name
    必ず指定します。名前空間を識別する一意の前を指定します。有効な Visual Basic 識別子を指定する必要があります。詳細については、「宣言された要素の名前」を参照してください。

  • componenttypes
    省略可能です。名前空間を構成する要素を指定します。列挙型、構造体、インターフェイス、クラス、モジュール、デリゲート、他の名前空間などがあります。

  • End Namespace
    Namespace ブロックを終了します。

解説

名前空間は、コードを組織化する枠組みとして使用されます。他のプログラムやアプリケーションに公開されるプログラミング要素を分類および表現する手段となります。名前空間は、クラスや構造体が型であるという意味での型ではないことに注意してください。名前空間のデータ型を持つプログラミング要素を宣言することはできません。

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

名前空間は、Public アクセス レベルであるかのように扱われます。名前空間には、同じプロジェクト内のコード、プロジェクトを参照する他のプロジェクト、およびプロジェクトからビルドされたアセンブリからアクセスできます。

規則

  • 属性名前空間には属性を適用できません。属性は、アセンブリのメタデータに情報を提供します。この情報は、名前空間のようなソース分類子にとって意味を持ちません。

  • 修飾子名前空間には、アクセス修飾子またはプロシージャ修飾子、またはその他の修飾子を適用できません。型ではないので、このような修飾子は意味を持ちません。

  • **入れ子。**名前空間は、別の名前空間の内部に宣言できます。宣言できる入れ子のレベルに厳密な制限はありませんが、最深部の名前空間に宣言した要素に他のコードからアクセスする場合、入れ子の階層にあるすべての名前空間を含む修飾文字列を使用する必要があることに注意してください。

動作

  • アクセス レベル名前空間レベルで宣言したプログラミング要素、つまり他の要素の内部ではなく名前空間の内部で宣言したプログラミング要素は、アクセス レベルが Public または Friend になります。このような要素のアクセス レベルは、特に指定しなければ、既定の Friend になります。名前空間レベルで宣言できる要素は、クラス、構造体、モジュール、インターフェイス、列挙、およびデリゲートです。詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。

  • **コンパイル。**Namespace ステートメントの後に宣言したすべてのプログラミング要素は、その名前空間に属します。最後に宣言された名前空間の中に要素をコンパイルする処理は、End Namespace ステートメントまたは別の Namespace ステートメントが現れるまで続けられます。

  • **名前空間への追加。**名前空間が既に定義されている場合、プロジェクトの外部にある名前空間でも、プログラミング要素をそこに追加できます。Namespace ステートメントを使って、後続の要素をその名前空間内にコンパイルするように Visual Basic に指示します。

    次のコード例は、新しいジェネリックなリスト クラスのスケルトンを定義し、それを System.Collections.Generic 名前空間に追加します。

    Namespace System.Collections.Generic
        Class specialSortedList(Of T)
            Inherits List(Of T)
            ' Insert code to define the special generic list class.
        End Class
    End Namespace
    
  • **ルート名前空間。**プロジェクト内のすべての名前空間の名前は、ルート名前空間に基づきます。Visual Studio では、プロジェクト名がプロジェクト内のすべてのコードの既定のルート名前空間として割り当てられます。たとえば、プロジェクト名が Payroll である場合、そのプログラミング要素は Payroll 名前空間に属します。Namespace funding と宣言した場合、この名前空間の完全名は Payroll.funding になります。

    前のジェネリックなリスト クラスの例のように、既存の名前空間を Namespace ステートメントで指定する場合は、ルート名前空間を null 値に設定できます。この設定を行うには、[プロジェクト] メニューの [プロジェクトのプロパティ] をクリックし、[ルート名前空間] ボックスをクリアして空にします。この設定を前記のジェネリックなリスト クラスの例で行わなかった場合、Visual Basic コンパイラは System.Collections.Generic を Payroll プロジェクト内の Payroll.System.Collections.Generic という完全名を持つ新しい名前空間と見なします。

    Global キーワードを使って、プロジェクトの外部で定義された名前空間の要素を参照することもできます。この方法を使うと、プロジェクト名をルート名前空間として使い続けることができます。それにより、意に反してプログラミング要素が既存の名前空間の要素と共にマージされる可能性は少なくなります。

トラブルシューティング

  • **未定義のデータ型。**ルート名前空間が、予期しない名前空間の連結を招く場合があります。プロジェクトの外部で定義された名前空間への参照を作成すると、Visual Basic コンパイラは、その名前空間をルート名前空間内の入れ子の名前空間として解釈します。その場合、コンパイラでは、外部の名前空間で定義されたデータ型を認識しません。この状況を回避するには、「ルート名前空間」で説明した手順でルート名前空間を null 値に設定するか、Global キーワードを使って外部名前空間の要素にアクセスします。

使用例

次のコード例は、入れ子の関係になるように 2 つの名前空間を宣言します。

Namespace n1
    Namespace n2
        Class a
            ' Insert class definition.
        End Class
    End Namespace
End Namespace

入れ子になった複数の名前空間を 1 行で宣言するコード例を次に示します。これは前のコード例と同じ意味を持ちます。

Namespace n1.n2
    Class a
        ' Insert class definition.
    End Class
End Namespace

次のコード例は、前の例で定義したクラスにアクセスします。

Dim instance As New n1.n2.a

参照

概念

宣言された要素の名前

Visual Basic における名前空間

参照

Imports ステートメント (.NET 名前空間および型)

Global