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. Las declaraciones de espacio de nombres con ámbito de archivo están disponibles con C# 10. 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);

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