1
resposta

Atribuição de Namespaces

Na nossa classe Program.cs, já tínhamos atribuído o uso do namespace System por conta de estarmos utilizando a classe Console para leitura e escrita de mensagens na nossa ConsoleApplication. Porém ao adicionarmos a IOException em nosso catch, tivemos que atribuir um novo using para o namespace System.IO. Minha pergunta é: se já tínhamos o namespace System atribuído a nossa aplicação, porque tivemos a necessidade de adicionar o System.IO? Se não me falha a memória, em versões mais antigas do VS e do .Net, bastava apenas referenciar o namespace raiz e com ele conseguíamos ter acesso a todos os seus namespaces derivados. Ex: bastaria apenas atribuir o "using System;" e através dele teríamos a visibilidade da classe IOException proveniente do namespace IO derivado do namespace System.

1 resposta

Olá Luiz!

Pelo que entendi, isso acontece para que não tenhamos problemas com duas classes ou dois métodos que tenham o mesmo nome. Não acredito que na estrutura do .NET possa ter algo assim, mas você só referencia o que vai realmente usar. Afinal, nada me impede de criar um método chamado WriteLine(), pois não é uma palavra reservada da linguagem. Temos um exemplo:

using System;
using System.Collections.Generic;
using System.Text;

namespace ApenasParaTestar
{
    class Console
    {
        public string Texto { get; set; }

        public Console(string texto)
        {
            Texto = texto;
        }

        public static void WriteLine(string texto)
        {
            System.Console.WriteLine($"Você escreveu o texto: {texto}");
        }
    }
}

using System;

namespace ApenasParaTestar
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Se tirarmos o System de System.Console.WriteLine($"Você escreveu o texto: {texto}");, teremos um erro de Stack overflow. Acredito que esse seja o motivo de não puxar todos namespaces a partir da raiz.

Bons estudos!