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("Inside first_space");
      }
   }
}
namespace second_space
{
   class namespace_cl
   {
      public void func()
      {
         Console.WriteLine("Inside 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();
   }
}

위의 코드가 컴파일되고 실행될 때, 다음과 같은 결과가 나타납니다:

Inside first_space
Inside 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("Inside first_space");
      }
   }
}
namespace second_space
{
   class efg
   {
      public void func()
      {
         Console.WriteLine("Inside second_space");
      }
   }
}   
class TestClass
{
   static void Main(string[] args)
   {
      abc fc = new abc();
      efg sc = new efg();
      fc.func();
      sc.func();
      Console.ReadKey();
   }
}

위의 코드가 컴파일되고 실행될 때, 다음과 같은 결과가 나타납니다:

Inside first_space
Inside 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