Por que não consigo usar namespaces parcialmente qualificados durante a inicialização do objeto?

Eu suspeito que esta é uma pergunta que já foi feita muitas vezes antes, mas eu não encontrei uma.

Normalmente, uso namespaces totalmente qualificados se não uso esse tipo frequentemente no arquivo ou adicionousing namaspacename na parte superior do arquivo para poder escrevernew ClassName().

Mas e se apenas uma parte do espaço para nome completo fosse adicionada? Por que o compilador não pode encontrar o tipo e gera um erro?

Considere seguir a aula em umaninhado namespace:

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

Portanto, se agora eu quero inicializar uma instância dessa classe, ela funciona das seguintes maneiras:

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();
    }
}

Mas o seguinte não 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();
    }
}

ele lança o erro do compilador:

Não foi possível encontrar o tipo ou nome do namespace 'ns_1_1' (está faltando uma diretiva de uso ou uma referência de montagem?)

Eu assumo porquens_1_1 é tratado como uma classe que contém outra classeFoo em vez de um espaço para nome, isso está correto?

Não encontrei a especificação de idioma. Onde isso está documentado? Por que o compilador não é inteligente o suficiente para verificar se há uma classeou namespace (-part)?

Aqui está outro exemplo - menos abstrato - do que quero dizer:

using System.Data;

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

Editar: agora eu sei por que isso me parece muito estranho. Funciona sem problemas no VB.NET:

Imports System.Data

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

        End Using
    End Sub
End Class

questionAnswers(4)

yourAnswerToTheQuestion