¿Por qué no puedo usar espacios de nombres parcialmente calificados durante la inicialización de objetos?

Sospecho que esta es una pregunta que se ha hecho muchas veces antes, pero no he encontrado una.

Normalmente uso espacios de nombres completamente calificados si no uso ese tipo con frecuencia en el archivo o agregousing namaspacename en la parte superior del archivo para poder escribirnew ClassName().

Pero, ¿qué pasa si solo se agrega una parte del espacio de nombres completo? ¿Por qué el compilador no puede encontrar el tipo y arroja un error?

Considere seguir la clase en unanidado espacio de nombres:

namespace ns_1
{
    namespace ns_1_1
    {
        public class Foo { }
    }
}

Entonces, si ahora quiero inicializar una instancia de esta clase, funciona de las siguientes maneras:

using ns_1.ns_1_1;

public class Program
{
    public Program()
    {
        // works, fully qualified namespace:
        var foo = new ns_1.ns_1_1.Foo();
        // works, because of using ns_1.ns_1_1:
        foo = new Foo();
    }
}

Pero lo siguiente no funciona:

using ns_1;

public class Program
{
    public Program()
    {
        // doesn't work even if using ns_1 was added
        var no_foo = new ns_1_1.Foo();
    }
}

arroja el error del compilador:

No se pudo encontrar el tipo o el nombre del espacio de nombres 'ns_1_1' (¿le falta una directiva de uso o una referencia de ensamblado?)

Asumo porquens_1_1 se trata como una clase que contiene otra claseFoo en lugar de un espacio de nombres, ¿es esto correcto?

No he encontrado la especificación del idioma, ¿dónde está documentado? ¿Por qué el compilador no es lo suficientemente inteligente como para verificar si hay una clase?o espacio de nombres (-parte)?

Aquí hay otro ejemplo, menos abstracto, de lo que quiero decir:

using System.Data;

public class Program
{
    public Program()
    {
        using (var con = new SqlClient.SqlConnection("...")) // doesn't work
        {
            //... 
        }
    }
}

Editar: ahora sé por qué esto me parece muy extraño. Funciona sin problemas en VB.NET:

Imports System.Data

Public Class Program
    Public Sub New()
        Using con = New SqlClient.SqlConnection("...") ' no problem

        End Using
    End Sub
End Class

Respuestas a la pregunta(4)

Su respuesta a la pregunta