Utilizar espacios de nombres (Guía de programación de C#)

Los espacios de nombres se utilizan en gran medida en los programas de C# de dos maneras. Primero, las clases de .NET Framework utilizan los espacios de nombres para organizar sus diversas clases. Segundo, declarar sus propios espacios de nombres permite ayudar a controlar el ámbito de la clase y los nombres de método en proyectos de programación de mayor tamaño.

Acceso a los espacios de nombres

La mayoría de las aplicaciones de C# comienzan con una sección de directivas using. Esta sección muestra los espacios de nombres que la aplicación utilizará con frecuencia y evita que el programador tenga que especificar un nombre completo cada vez que se utiliza un método contenido dentro.

Por ejemplo, incluyendo la línea:

using System;

Al inicio de un programa, el programador puede utilizar el código:

Console.WriteLine("Hello, World!");

En lugar de:

System.Console.WriteLine("Hello, World!");

Alias de espacio de nombres

using (Directiva, Referencia de C#) también se puede utilizar para crear un alias para un espacio de nombres. Por ejemplo, si utiliza un espacio de nombres escrito con anterioridad que contiene espacios de nombres anidados, puede declarar un alias para proporcionar una forma rápida de hacer referencia a uno en particular, tal y como se muestra en el siguiente ejemplo:

using Co = Company.Proj.Nested;  // define an alias to represent a namespace

Uso de espacios de nombres para controlar el ámbito

La palabra clave namespace se utiliza para declarar un ámbito. La capacidad de crear ámbitos dentro del proyecto permite organizar el código y le permite crear tipos únicos globales. En el ejemplo siguiente, una clase titulada SampleClass se define en dos espacios de nombres, uno anidado dentro de otro. . Operador (Referencia de C#) se utiliza para diferenciar a qué método se llama.

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

    // Create a nested namespace, and define another class.
    namespace NestedNamespace
    {
        class SampleClass
        {
            public void SampleMethod()
            {
                System.Console.WriteLine(
                  "SampleMethod inside NestedNamespace");
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Displays "SampleMethod inside SampleNamespace."
            SampleClass outer = new SampleClass();
            outer.SampleMethod();

            // Displays "SampleMethod inside SampleNamespace."
            SampleNamespace.SampleClass outer2 = new SampleNamespace.SampleClass();
            outer2.SampleMethod();

            // Displays "SampleMethod inside NestedNamespace."
            NestedNamespace.SampleClass inner = new NestedNamespace.SampleClass();
            inner.SampleMethod();
        }
    }
}

Nombres completos

Los espacios de nombres y tipos tienen nombres únicos que se describen mediante nombres completos que indican una jerarquía lógica. Por ejemplo, la instrucción A.B implica que A es el nombre del espacio de nombres o tipo y que B está anidado dentro de él.

En el siguiente ejemplo, se muestran clases y espacios de nombres anidados. El nombre completo se indica como un comentario que sigue a cada entidad.

namespace N1     // N1
{
    class C1      // N1.C1
    {
        class C2   // N1.C1.C2
        {
        }
    }
    namespace N2  // N1.N2
    {
        class C2   // N1.N2.C2
        {
        }
    }
}

En el segmento de código anterior:

  • El espacio de nombres N1 es un miembro del espacio de nombres global. Su nombre completo es N1.

  • El espacio de nombres N2 es un miembro del espacio de nombres N1. Su nombre completo es N1.N2.

  • La clase C1 es un miembro de N1. Su nombre completo es N1.C1.

  • El nombre de clase C2 se utiliza dos veces en el código. Sin embargo, los nombres completos son únicos. La primera instancia de C2 se declara dentro de C1; por lo tanto, su nombre completo es N1.C1.C2. La segunda instancia de C2 se declara dentro de un espacio de nombres N2; por lo tanto, su nombre completo es N1.N2.C2.

Mediante el segmento de código anterior, se puede agregar un nuevo miembro de clase, C3, al espacio de nombres N1.N2 de la siguiente forma:

namespace N1.N2
{
    class C3   // N1.N2.C3
    {
    }
}

En general, utilice :: para hacer referencia a un alias de espacio de nombres o global:: para hacer referencia al espacio de nombres global y . para calificar tipos o miembros.

No es correcto utilizar :: con un alias que hace referencia a un tipo en lugar de a un espacio de nombres. Por ejemplo:

using Alias = System.Console;
class TestClass
{
    static void Main()
    {
        // Error
        //Alias::WriteLine("Hi");

        // OK
        Alias.WriteLine("Hi");
    }
}

Recuerde que la palabra global no es un alias predefinido; por lo tanto, global.X no tiene ningún significado especial. Sólo adquiere un significado especial si se utiliza con ::.

La advertencia del compilador CS0440 se genera si se define un alias denominado global porque global:: siempre hace referencia al espacio de nombres global y no a un alias. Por ejemplo, la línea siguiente genera la advertencia:

using global = System.Collections;   // Warning

El uso de :: con alias es una buena idea y proporciona protección contra la introducción inesperada de tipos adicionales. Por ejemplo, considere este ejemplo:

using Alias = System;
namespace Library
{
    public class C : Alias.Exception { }
}

Esto funciona, pero si después se introdujera un tipo denominado Alias, Alias. se enlazaría en su lugar a ese tipo. El uso de Alias::Exception asegura que Alias se trate como un alias de espacio de nombres y no se confunda con un tipo.

Consulte el tema Cómo: Utilizar el alias del espacio de nombres global (Guía de programación de C#) para obtener más información sobre el alias global.

Vea también

Referencia

Espacios de nombres (Guía de programación de C#)

Palabras clave del espacio de nombres (Referencia de C#)

. Operador (Referencia de C#)

:: (operador) (Referencia de C#)

extern (Referencia de C#)

Conceptos

Guía de programación de C#