namespace

namespace キーワードは、関連する一連のオブジェクトを含む範囲を宣言するために使用されます。 名前空間を利用し、コード要素を整理したり、グローバルに一意の型を作成したりできます。

namespace SampleNamespace
{
    class SampleClass { }

    interface ISampleInterface { }

    struct SampleStruct { }

    enum SampleEnum { a, b }

    delegate void SampleDelegate(int i);

    namespace Nested
    {
        class SampleClass2 { }
    }
}

"ファイル スコープ名前空間宣言" では、ファイルのすべての型が 1 つの名前空間にあることを宣言できます。 ファイル スコープ名前空間宣言は C# 10 で使用できます。 次の例は前の例に似ていますが、ファイル スコープ名前空間宣言が使用されています。

using System;

namespace SampleFileScopedNamespace;

class SampleClass { }

interface ISampleInterface { }

struct SampleStruct { }

enum SampleEnum { a, b }

delegate void SampleDelegate(int i);

前の例には、入れ子になった名前空間が含まれていません。 ファイル スコープ名前空間には、名前空間宣言を追加できません。 入れ子になった名前空間と 2 つ目のファイル スコープ名前空間は宣言できません。

namespace SampleNamespace;

class AnotherSampleClass
{
    public void AnotherSampleMethod()
    {
        System.Console.WriteLine(
            "SampleMethod inside SampleNamespace");
    }
}

namespace AnotherNamespace; // Not allowed!

namespace ANestedNamespace // Not allowed!
{
   // declarations...
}

名前空間内では、以下の型を 0 個以上宣言できます。

コンパイラによって既定の名前空間が追加されます。 この無名の名前空間はグローバル名前空間とも呼ばれますが、すべてのファイルに存在します。 宣言された名前空間に含まれない宣言が含まれます。 グローバル名前空間内にある識別子は、名前付き名前空間で利用できます。

名前空間には暗黙的にパブリック アクセスが与えられます。 名前空間内の要素に割り当てることができるアクセス修飾子については、「アクセス修飾子」を参照してください。

名前空間は 2 つ以上の宣言で定義できます。 たとえば、次の例では、MyCompany 名前空間の一部として 2 つのクラスを定義しています。

namespace MyCompany.Proj1
{
    class MyClass
    {
    }
}

namespace MyCompany.Proj1
{
    class MyClass1
    {
    }
}

入れ子になった名前空間で静的なメソッドを呼び出す方法の例を次に示します。

namespace SomeNameSpace
{
    public class MyClass
    {
        static void Main()
        {
            Nested.NestedNameSpaceClass.SayHello();
        }
    }

    // a nested namespace
    namespace Nested
    {
        public class NestedNameSpaceClass
        {
            public static void SayHello()
            {
                Console.WriteLine("Hello");
            }
        }
    }
}
// Output: Hello

C# 言語仕様

詳細については、C# 言語仕様に関する記事の「名前空間」に関するセクションを参照してください。 ファイル スコープ名前空間宣言の詳細については、機能の仕様に関するページを参照してください。

関連項目