次の方法で共有


Namespace ステートメント

名前空間の名前を宣言し、宣言に続くソース コードをその名前空間内でコンパイルします。

構文

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

部品

Global 省略可能。 プロジェクトのルート名前空間から名前空間を定義できます。 Visual Basic の名前空間を参照してください。

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

componenttypes 省略可能です。 名前空間を構成する要素。 これには、列挙型、構造体、インターフェイス、クラス、モジュール、デリゲート、およびその他の名前空間が含まれますが、これらに限定されません。

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

注釈

名前空間は組織システムとして使用されます。 他のプログラムやアプリケーションに公開されているプログラミング要素を分類して提示する方法を提供します。 名前空間は、クラスまたは構造体であるという意味では型ではないことに注意してください。名前空間のデータ を持つプログラミング要素を宣言することはできません。

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

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

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

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

アクセス レベル

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

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

ルート名前空間

プロジェクト内のすべての名前空間名は、 ルート名前空間に基づいています。 Visual Studio では、プロジェクト内のすべてのコードの既定のルート名前空間としてプロジェクト名が割り当てられます。 たとえば、プロジェクトの名前が Payroll の場合、そのプログラミング要素は名前空間 Payrollに属します。 Namespace fundingを宣言すると、その名前空間の完全な名前がPayroll.funding

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

または、 Global キーワードを使用して、プロジェクトの外部で定義されている名前空間の要素を参照することもできます。 これにより、プロジェクト名をルート名前空間として保持できます。 これにより、プログラミング要素を既存の名前空間の要素と誤ってマージする可能性が低くなります。 詳細については、 Visual Basic の名前空間の「完全修飾名のグローバル キーワード」セクションを参照してください。

Global キーワードは、Namespace ステートメントでも使用できます。 これにより、プロジェクトのルート名前空間から名前空間を定義できます。 詳細については、 Visual Basic の名前空間の「名前空間ステートメントのグローバル キーワード」セクションを参照してください。

Troubleshooting. ルート名前空間によって、名前空間名が予期せず連結される可能性があります。 プロジェクトの外部で定義されている名前空間を参照する場合、Visual Basic コンパイラは、ルート名前空間内の入れ子になった名前空間として解釈できます。 このような場合、コンパイラは外部名前空間で既に定義されている型を認識しません。 これを回避するには、「ルート名前空間」の説明に従ってルート名前空間を null 値に設定するか、 Global キーワードを使用して外部名前空間の要素にアクセスします。

属性と修飾子

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

アクセス修飾子またはプロシージャ修飾子、またはその他の修飾子を名前空間に適用することはできません。 型ではないため、これらの修飾子は意味がありません。

例 1

次の例では、2 つの名前空間を宣言します。1 つは入れ子になっています。

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

例 2

次の例では、1 行に複数の入れ子になった名前空間を宣言します。これは前の例と同じです。

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

例 3

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

Dim instance As New n1.n2.a

例 4

次の例では、新しいジェネリック リスト クラスのスケルトンを定義し、 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

こちらも参照ください