English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# ナームスペース(Namespace)

名前空間の設計目的は、一つの名前セットを他の名前セットから分離する方法を提供することです。同一の名前空間内で宣言されたクラスの名前と別の名前空間内で宣言された同じクラスの名前は衝突しません。

コンピュータシステムの例として、一つのフォルダー(ディレクトリ)には複数のフォルダーが含まれることができますが、各フォルダーには同じファイル名が含まれないことがあります。また、異なるフォルダー間のファイルは同名で重複することがあります。

名前空間の定義

名前空間の定義は、キーワード namespace まず、次のように名前空間の名前を続けます:

namespace namespace_name
{
   // コード宣言
}

名前空間のバージョンをサポートする関数や変数を呼び出すために、名前空間の名前を前に置きます。以下のようになります:

namespace_name.item_name;

以下のプログラムは、名前空間の使用法を示しています:

using System;
namespace first_space
{
   class namespace_cl
   {
      public void func()
      {
         Console.WriteLine("first_space内");
      }
   }
}
namespace second_space
{
   class namespace_cl
   {
      public void func()
      {
         Console.WriteLine("second_space内");
      }
   }
}   
class TestClass
{
   static void Main(string[] args)
   {
      first_space.namespace_cl fc = new first_space.namespace_cl();
      second_space.namespace_cl sc = new second_space.namespace_cl();
      fc.func();
      sc.func();
      Console.ReadKey();
   }
}

上記のコードがコンパイルおよび実行されると、以下の結果が得られます:

first_space内
second_space内

using キーワード

using キーワードは、プログラムが指定されたネームスペース内の名前を使用していることを示します。例えば、プログラム内で以下のように使用しています: System Consoleクラスを定義しているネームスペースです。以下のように書くこともできます:

Console.WriteLine ("Hello there");

完全限定名を書くこともできます:

System.Console.WriteLine("Hello there");

以下のように使用することもできます: using ネームスペース命令を使用すると、使用する際にネームスペース名を前に付ける必要がなくなります。この命令は、その後のコードが指定されたネームスペース内の名前を使用していることをコンパイラに伝えます。以下のコードはネームスペースの使用例を示しています。

以下のように、using指定を使用して上記の例を再現します:

using System;
using first_space;
using second_space;
namespace first_space
{
   class abc
   {
      public void func()
      {
         Console.WriteLine("first_space内");
      }
   }
}
namespace second_space
{
   class efg
   {
      public void func()
      {
         Console.WriteLine("second_space内");
      }
   }
}   
class TestClass
{
   static void Main(string[] args)
   {
      abc fc = new abc();
      efg sc = new efg();
      fc.func();
      sc.func();
      Console.ReadKey();
   }
}

上記のコードがコンパイルおよび実行されると、以下の結果が得られます:

first_space内
second_space内

ネストされたネームスペース

ネームスペースはネスト可能であり、以下のように、ネームスペース内に別のネームスペースを定義できます:

namespace namespace_name1 
{
   // コード宣言
   namespace namespace_name2 
   {
     // コード宣言
   }
}

以下のように、ネストされたネームスペースのメンバーに点(.)演算子を使用してアクセスできます:

using System;
using SomeNameSpace;
using SomeNameSpace.Nested;
namespace SomeNameSpace
{
    public class MyClass 
    {
        static void Main() 
        {
            Console.WriteLine("In SomeNameSpace");
            Nested.NestedNameSpaceClass.SayHello();
        }
    }
    // 内嵌ナームスペース
    namespace Nested   
    {
        public class NestedNameSpaceClass 
        {
            public static void SayHello() 
            {
                Console.WriteLine("In Nested");
            }
        }
    }
}

上記のコードがコンパイルおよび実行されると、以下の結果が得られます:

In SomeNameSpace
In Nested