C# Espacio de nombres (Namespace)

Espacio de nombresSu propósito de diseño es proporcionar una forma de separar un grupo de nombres de otros. Los nombres de las clases declaradas en un espacio de nombres no entran en conflicto con los nombres de las mismas clases declaradas en otro espacio de nombres.

Tomemos un ejemplo de un sistema informático: una carpeta (directorio) puede contener múltiples carpetas, y en cada carpeta no puede haber archivos con el mismo nombre, pero los archivos en diferentes carpetas pueden tener el mismo nombre.

Definición de espacios de nombres

La definición de un espacio de nombres comienza con la palabra clavenamespaceseguida del nombre del espacio de nombres, como se muestra a continuación:

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

Para llamar a funciones o variables que admiten la versión de espacio de nombres, se coloca el nombre del espacio de nombres delante, como se muestra a continuación:

namespace_name.item_name;

El siguiente programa demuestra el uso de espacios de nombres:

Ejemplo

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();
   }
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

Inside first_space
Inside second_space

usingPalabra clave

usingLa palabra clave indica que el programa utiliza nombres del espacio de nombres dado. Por ejemplo, usamos en el programaSystemel espacio de nombres, en el que se define la clase Console. Podemos escribir simplemente:

Console.WriteLine ("Hello there");

También podemos escribir el nombre totalmente calificado, como sigue:

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

También puede usarusingla directiva de espacio de nombres, de modo que no sea necesario anteponer el nombre del espacio de nombres al usarlo. Esta directiva le dice al compilador que el código subsiguiente utiliza nombres del espacio de nombres especificado. El siguiente código demuestra la aplicación de espacios de nombres.

Reescribamos el ejemplo anterior usando la directiva using:

Ejemplo

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();
   }
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

Inside first_space
Inside second_space

Espacios de nombres anidados

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

namespace namespace_name1 
{
   // 代码声明
   namespace namespace_name2 
   {
     // 代码声明
   }
}

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

Ejemplo

using System;
using SomeNameSpace;
using SomeNameSpace.Nested;

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

    // espacio de nombres anidado
    namespace Nested  
    {
        public class NestedNameSpaceClass
        {
            public static void SayHello()
            {
                Console.WriteLine("In Nested");
            }
        }
    }
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

In SomeNameSpace
In Nested
Otras extensiones