Cuando hacemos referencia a una clase o un tipo desde nuestro código podemos emplear una ruta completa de espacios de nombres para llegar hasta él. Por ejemplo, si escribimos System.Console.ReadLine(); se busca la clase Console dentro del espacio de nombres System que está en la raíz de todos los espacios de nombres (es decir, System se encuentra en la parte más alta de la jerarquía de espacios nombres junto a otros como Cryptography, etc... y los que nosotros mismos definamos o agreguemos a un proyecto).

¿Qué pasa sin embargo si escribimos esa misma línea dentro de una clase que está contenida dentro de un espacio de nombres llamado también System?, por ejemplo:

namespace MiEmpresa.MiBiblioteca
{
    namespace System
    {
        class MiClase
        {
            System.Console.ReadLine();
        }
    }
}

El resultado será que la búsqueda de la clase Console comienza en el espacio de nombres actual y sólo cuando se recorra y no aparezca (porque pudiera aparecer si la hemos definido nosotros) se buscará desde el raíz que es el que verdaderamente nos interesaba.

En C# 2.0 se puede evitar esto con el nuevo cualificador que sirve para indicar la raíz y que se denota mediante el operador "::", es decir, dos símbolos de dos puntos seguidos. Así en el ejemplo, bastará con escribir:

::System.Console.ReadLine();

para que se busque desde la raíz directamente.

Cuiroso ¿verdad?

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor