Los Namespaces (espacios de nombres) son una herramienta de organización en el framework de .NET que nos permite agrupar bajo un mismo nombre clases y otros elementos de código relacionados.
Los Namespaces nos permiten evitar conflictos de nombres entre diferentes elementos. Por ejemplo, imaginar dos librerías que usan un mismo nombre Cliente
. Con los namespace evitamos el conflicto y la ambigüedad.
Los Namespaces son útiles para mantener el orden en proyectos a medida que aumenta su tamaño. Así, nos permiten organizar la lógica de una aplicación y separar las funcionalidades en diferentes áreas
Creación de un Namespace en .NET
La creación de un Namespace en .NET se realiza mediante la declaración de la palabra clave namespace
seguida del nombre que le queramos dar.
Luego, dentro de las llaves colocamos las clases y otros elementos de programación relacionados.
namespace MiEspacioDeNombres
{
public class MiClase
{
// Código de la clase
}
}
En este ejemplo, MiEspacioDeNombres
es el Namespace que contiene la definición de MiClase
.
Uso de los Namespaces
Para utilizar un Namespace en un programa de C#, los podemos hacer de dos maneras:
Utilizando el nombre completo del tipo
Podemos utilizar el nombre completo de un tipo, lo que significa incluir el Namespace antes del nombre del tipo (a esto se le llama full qualified)
Por ejemplo, si tenemos un Namespace llamado MiPrograma
y una clase llamada MiClase
, podemos usarla de la siguiente manera:
MiPrograma.MiClase miObjeto = new MiPrograma.MiClase();
Importando el Namespace
Otra forma de utilizar un Namespace es importándolo en la sección de using
(al principio del archivo). Esto permite utilizar directamente el nombre del tipo sin tener que especificar el Namespace completo.
using MiPrograma;
// ...
MiClase miObjeto = new MiClase();
En este caso, no es necesario usar el nombre completo MiPrograma.MiClase
, ya que el Namespaces se ha importado con using
.
Namespaces Anidados
Los Namespace pueden ser anidados. Es decir, un Namespace puede contener otros Namespace. Esto permite una organización jerárquica del código (aunque no es especialmente frecuente).
namespace Empresa
{
namespace Proyecto
{
public class ClasePrincipal
{
// Código de la clase
}
}
}
Para acceder a ClasePrincipal
, se puede usar Empresa.Proyecto.ClasePrincipal
o importar el namespace anidado:
using Empresa.Proyecto;
public class ClaseSecundaria
{
public void Metodo()
{
ClasePrincipal instancia = new ClasePrincipal();
}
}
Aliases de Namespaces
En algunos casos nos puede ser útil definir un alias para un Namespace. Esto es útil
- Si el nombre del Namespace es largo
- Si existen conflictos de nombres
Para ello, utilizamos la palabra clave using
seguida de un alias y el Namespace. Asi:
using Alias = Nombre.Largo.De.Namespace;
public class ClaseConAlias
{
public void Metodo()
{
Alias.Clase instancia = new Alias.Clase();
}
}
Namespaces Estáticos
C# también permite importar miembros estáticos de una clase, lo que se conoce como using static
. Esto es útil para acceder a métodos estáticos y constantes sin tener que especificar el nombre completo de la clase.
using static System.Math;
public class Calculadora
{
public double CalcularHipotenusa(double a, double b)
{
return Sqrt(a * a + b * b);
}
}
En este ejemplo,
Sqrt
es un método estático de la claseSystem.Math
- Así lo podemos invocar llamar directamente sin prefijar con
Math