Compartir a través de


Palabra clave namespace

La palabra clave namespace se usa para declarar un ámbito que contiene un conjunto de objetos relacionados. Puede usar un espacio de nombres para organizar los elementos de código y crear tipos únicos globales.

namespace SampleNamespace
{
    class SampleClass { }

    interface ISampleInterface { }

    struct SampleStruct { }

    enum SampleEnum { a, b }

    delegate void SampleDelegate(int i);

    namespace Nested
    {
        class SampleClass2 { }
    }
}

Las declaraciones de espacio de nombres con ámbito de archivo permiten declarar que todos los tipos de un archivo están en un único espacio de nombres. El ejemplo siguiente es similar al anterior, pero usa una declaración de espacio de nombres con ámbito de archivo:

using System;

namespace SampleFileScopedNamespace;

class SampleClass { }

interface ISampleInterface { }

struct SampleStruct { }

enum SampleEnum { a, b }

delegate void SampleDelegate(int i);

Uso de instrucciones en espacios de nombres con ámbito de archivo

Cuando se utilizan espacios de nombres con ámbito de fichero, la colocación de las instrucciones using afecta a su ámbito dentro del fichero. Espacios de nombres con ámbito de archivo inferiores a la declaración de espacio de nombres tradicional equivalente que termina con un corchete de cierre al final del archivo. Este comportamiento determina dónde using se aplican las directivas de la siguiente manera:

  • Si las instrucciones using se colocan antes de la declaración de espacio de nombres con ámbito de archivo, se tratan como si estuvieran fuera del espacio de nombres y se interpretan como espacios de nombres totalmente cualificados.
  • Si las instrucciones using se colocan después de la declaración de espacio de nombres con ámbito de archivo, tienen ámbito dentro del propio espacio de nombres.

Por ejemplo:

// This using is outside the namespace scope, so it applies globally
using System;

namespace SampleNamespace; // File-scoped namespace declaration

// This using is inside the namespace scope
using System.Text;

public class SampleClass
{
    // Class members...
}

En el ejemplo anterior, System es accesible globalmente, mientras que System.Text solo se aplica dentro de SampleNamespace.

En el ejemplo anterior no se incluye ningún espacio de nombres anidado. Los espacios de nombres con ámbito de archivo no pueden incluir declaraciones de espacio de nombres adicionales. No se puede declarar un espacio de nombres anidado ni un segundo espacio de nombres con ámbito de archivo:

namespace SampleNamespace;

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

namespace AnotherNamespace; // Not allowed!

namespace ANestedNamespace // Not allowed!
{
   // declarations...
}

En un espacio de nombres, se pueden declarar cero o más de los siguientes tipos:

  • class
  • interface
  • struct
  • enum
  • delegate
  • los espacios de nombres anidados se pueden declarar excepto en declaraciones de espacio de nombres con ámbito de archivo

El compilador agrega un espacio de nombres predeterminado. Este espacio de nombres sin nombre, que a veces se denomina espacio de nombres global, está presente en todos los archivos. Contiene declaraciones no incluidas en un espacio de nombres declarado. Todos los identificadores del espacio de nombres global están disponibles para su uso en un espacio de nombres con nombre.

Los espacios de nombres tienen acceso público implícitamente. Para ver una descripción de los modificadores de acceso que se pueden asignar a los elementos de un espacio de nombres, vea Modificadores de acceso.

Es posible definir un espacio de nombres en dos o más declaraciones. Por ejemplo, en el ejemplo siguiente se definen dos clases como parte del espacio de nombres MyCompany:

namespace MyCompany.Proj1
{
    class MyClass
    {
    }
}

namespace MyCompany.Proj1
{
    class MyClass1
    {
    }
}

En el ejemplo siguiente se muestra cómo llamar a un método estático en un espacio de nombres anidado.

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

    // a nested namespace
    namespace Nested
    {
        public class NestedNameSpaceClass
        {
            public static void SayHello()
            {
                Console.WriteLine("Hello");
            }
        }
    }
}
// Output: Hello

Especificación del lenguaje C#

Para más información, vea la sección Espacio de nombres de la Especificación del lenguaje C#. Para obtener más información sobre las declaraciones de espacio de nombres con ámbito de archivo, consulte la especificación de características.

Vea también