Namespaces en C#
Cómo crear y usar Namespaces para organizar sus clases.
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.
Apoya el contenido de mi blog a través de:
Fuente: