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

Espacio de nombres (Namespace) de C#

命名空间的设计目的是提供一种将一组名称与其他名称分隔开的方法。在同一个命名空间中声明的类的名称与另一个命名空间中声明的相同类的名称不会冲突。

我们以计算机系统中的一个实例为例,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。

定义命名空间

命名空间的定义是以关键字 namespace 首先,后跟命名空间的名称,如下所示:

namespace namespace_name
{
   // Declaración de código
}

为了调用支持命名空间版本的函数或变量,需要将命名空间的名称放在前面,如下所示:

namespace_name.item_name;

以下程序展示了命名空间的用法:

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

Cuando el código superior se compila y ejecuta, se producirá el siguiente resultado:

Dentro de first_space
Dentro de second_space

using Palabra clave

using Palabra clave que indica que el programa utiliza los nombres del espacio de nombres especificado. Por ejemplo, utilizamos System Espacio de nombres donde se define la clase Console. Podemos escribir simplemente:

Console.WriteLine ("Hola allí");

Podemos escribir el nombre completo, como follows:

System.Console.WriteLine("Hola allí");

También puede usar using Instrucciones de espacio de nombres, de modo que no sea necesario agregar el nombre del espacio de nombres al principio al usar. Esta instrucción le indica al compilador que el código siguiente utiliza los nombres del espacio de nombres especificado. A continuación se muestra un ejemplo de la aplicación del espacio de nombres.

Vamos a usar using para especificar el ejemplo anterior:

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

Cuando el código superior se compila y ejecuta, se producirá el siguiente resultado:

Dentro de first_space
Dentro de second_space

Espacio de nombres anidado

Los espacios de nombres pueden estar anidados, es decir, puede definir otro espacio de nombres dentro de uno, como se muestra a continuación:

namespace namespace_name1 
{
   // Declaración de código
   namespace namespace_name2 
   {
     // Declaración de código
   }
}

Puede usar el operador de punto (.) para acceder a los miembros del espacio de nombres anidado, como se muestra a continuación:

using System;
using AlgunoEspacio;
using AlgunoEspacio.Nested;
namespace AlgunoEspacio
{
    public class MyClass 
    {
        static void Main() 
        {
            Console.WriteLine("En AlgunoEspacio");
            Nested.NestedNameSpaceClass.SayHello();
        }
    }
    // Espacio de nombres enlazado
    namespace Nested   
    {
        public class NestedNameSpaceClass 
        {
            public static void SayHello() 
            {
                Console.WriteLine("En Nested");
            }
        }
    }
}

Cuando el código superior se compila y ejecuta, se producirá el siguiente resultado:

En SomeNameSpace
En Nested