Conviértete en un Máster de C# y .NET
Antes de continuar, te invito a que te suscribas a mi academia de entrenamiento para desarrolladores .NET, en la que vas a aprender sobre C#, Blazor, Xamarin, .NET MAUI, ASP.NET, entre muchos otros temas por un mínimo precio.
Si te has preguntado alguna vez para qué sirven los espacios de nombres en C#, la respuesta es que son, por decirlo de algún modo, contenedores para elementos como clases, enumeraciones, entre otros.
Te explico lo anterior, supongamos que estamos desarrollando una aplicación de un videojuego, y se nos ocurre crear una clase llamada “Player”, la cual contendrá elementos como la cantidad de vidas del jugador, entre otros elementos. Aquí usaré una aplicación de consola para ejemplificar este proyecto.
using System; class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } public class Player { public int Vidas { get; set; } }
Todo va de maravilla, pero nos atascamos un día, y decidimos comprar un día una biblioteca adicional, al cual llamaremos Addons, que contiene elementos ó clases que nos servirán para desatascar nuestro problema. Esto lo simularemos con una única clase para este ejemplo.
Sin embargo, nos enfrentamos a otro problema, y es que dentro de ese ensamblado, existe también una clase llamada Player, la cual contiene ciertas propiedades y métodos que sirven para otras cosas muy distintas a las que nosotros estamos haciendo:
class Player { }
¿Te fijaste en el problema? Dos clases con el mismo nombre, algo que definitivamente al compilador no le va a gustar nada.
¿Cómo utilizar los espacios de nombres en C#?
Anteriormente, los desarrolladores colocaban un prefijo antes del nombre de la clase, por ejemplo “SpaceInvadersGamePlayer”, ó “GraphicsLibrarySprite”, sin embargo, esto es poco escalable, ya que los nombres pueden volverse bastante grandes, lo que es improductivo al momento de estar escribiendo código.
La solución de este problema, son precisamente los espacios de nombres. Con ellos, podemos “agrupar” en un contexto diferente cada una de las clases, con lo que lograremos que las clases no sean confundidas, y con ello solucionar el problema.
Con ello entonces, podríamos definir las clases de nuestro juego así:
using System; namespace Game { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } public class Player { public int Vidas { get; set; } } }
Con lo que el error desaparece inmediatamente, no por ello, dejaremos sin colocar el espacio de nombres a la biblioteca adicional:
namespace Addons { class Player { } }
Supongamos que ahora, deseamos utilizar la clase Player del proyecto Addons, y escribimos lo siguiente:
Como puedes observar, se está haciendo un llamado a la clase “Player”, que pertenece al espacio de nombres “Game”, sin embargo, nosotros deseamos utilizar la clase “Player” que pertenece al espacio de nombres “Addons”.
Para resolver esto, haremos uso del nombre completo de la clase, lo cual quedaría:
static void Main(string[] args) { Console.WriteLine("Hello World!"); Addons.Player player = new Addons.Player(); }
Importando espacios de nombres en un proyecto
Si has creado un nuevo proyecto en Visual Studio, seguramente te has encontrado con un montón de líneas al inicio de cada archivo que inicia con:
using System;
Si quieres probar para qué sirven estas líneas, elimínalas, y fíjate el montón de errores que salgan inmediatamente.
Este problema podrías solucionarlo, colocando su “nombre completo” de la clase, es decir, “nombre del espacio de nombres + nombre de la clase”, por lo que si escribo:
System.Console.WriteLine("Hello World!");
El problema desaparece inmediatamente. Sin embargo, imagina estar escribiendo cada una de las clases así, seguro que perderíamos mucho tiempo.
Es por ello, que utilizando la palabra “using”, indicamos que queremos utilizar un espacio de nombres diferente del cua nos encontramos, con lo que podremos utilizar las clases que se encuentren en dicho espacio de nombres, sin necesidad de estar escribiendo el nombre del espacio de nombres antes del nombre de la clase.
Notas sobre los espacios de nombres en C#
Es una práctica recomendada siempre hacer uso de espacios de nombres, por lo que Visual Studio siempre nos creará los elementos agrupados en el espacio de nombres del proyecto en el cual estemos trabajando.
No existe límite de espacios de nombres para nuestras aplicaciones, por ejemplo, podríamos tener un espacio de nombres como: “Northwind.UI.Views.Layouts”.
Un using, te permite “importar” las clases al contexto en el cual te encuentres, con lo que te liberas de estar escribiendo toda la definición del nombre completo de una clase (espacio de nombres + clase).