03/10/26 · 3 min de lectura

Namespaces en C#

Cómo crear y usar Namespaces para organizar sus clases.

Imagen por Nick Hamze .

Los namespaces son algo como un contenedor para las clases.

Su propósito es ayudarte a organizar tus scripts y evitar conflictos entre scripts.

Puedes, por ejemplo, hacer herramientas en Unity para ayudarte a desarrollar tu aplicación. Pues mantener las herramientas y las aplicaciones en namespaces separados de tal manera que no tengas demasiadas clases innecesarias sugeridas por el autocompletar.

Es muy probable que todos los scripts que ha estado escribiendo hasta ahora han estado usando los namespaces.

Es la parte superior de los scripts de C# en Unity, por defecto, verás dos líneas: using UnityEngine; y using System.Collections;, UnityEngine y System.Collections son namespaces.

La palabra reservada using significa que cualquier cosa dentro del namespaces que sigue puede usarse en el script trata de comentar las directivas using en la parte superior del script y puedes ver que el autocompletar tiene muchas menos clases que puedas usar. Eso es porque las clases como GameObject, Transform, RigiBody y muchas más, están en el namespaces del motor Unity.

// using UnityEngine;
// using System.Collections;

public class SomeClass : MonoBehaviour { /*...*/ }

Para poner nuestra clase en un namespaces, necesitamos rodearla con la sintaxis de namespaces. Comienza con la palabra clave namespaces. Esto puede ser un espacio de nombres ya existentes o uno nuevo.

En este caso, vamos a invocar nuestro namespaces SampleNameSpace. Luego abrimos llave antes de la clase, y cerramos llave después de la clase. Desde ahora nuestra clase pertenece a SampleNameSpace, vamos a aplicar sangría para mostrar pertenencia.

namespace SampleNameSpace
{
    public class SomeClass { /*...*/ }
}

Hay tres maneras en las que podemos usar las clases de un namespaces específico. Ya hemos visto que la primera es incluir una directiva using en la parte superior de tu script. La segunda manera de acceder a la clase es usando el operador de acceso. Por ejemplo, en vez de tener using SampleNameSpace; en la parte superior del script cada vez que querramos hacer una referencia a una clase del SampleNameSpace, podríamos escribir SampleNameSpace.SomeClass (punto y luego la clase).

public class SomeOtherClass : MonoBehaviour
{
    void Start()
    {
        SampleNameSpace.SomeClass myClass = new SampleNameSpace.SomeClass()
    }
}

Esta opción evita ambigüedades, pero podría ser muy engorrosa, particularmente con los namespaces muy largos como SampleNameSpace.

La última opción es poner la clase que estás escribiendo en el namespaces al que necesitas acceder. Generalmente no se recomienda esto a menos que quieras tener esa clase en el mismo espacio de nombre de todos modos.

namespace SampleNameSpace
{
    public class SomeOtherClass : MonoBehaviour
    {
        void Start()
        {
            SomeClass myClass = new SomeClass()
        }
    }
}

Siempre y cuando las clases estén en namespaces diferentes, pueden tener el mismo nombre. No obstante, desde que los scripts tienen el mismo nombre que la clase que los contiene, los scripts deberían estar en carpetas diferentes para que puedan tener el mismo nombre que la clase.

Cuando uses los namespaces ten cuidado de evitar definiciones ambiguas.

Por ejemplo, dos espacios de nombres muy comunes de usar son System (sistema) y UnityEngine (motor Unity). Ambos contienen una definición para una clase llamada Random si estás usando ambas, necesitas desambiguar la clase usando el operador de acceso. Usa System.Random o UnityEngine.Random.

Tal vez habrás notado que el segundo valor por defecto que usa la directiva es el espacio de nombre System.Collections. Esto muestra que los espacios de nombre son anidables. Para anidar los namespaces simplemente rodea la declaración de un espacio de nombre dentro de otra.

Gist del proyecto

Apoya el contenido de mi blog a través de:

Fuente:

Copiado!