Arquivo de dezembro \29\-03:00 2009
Namespaces em C#
Publicado por julianomarcon em Sem categoria em 29 de dezembro de 2009
Namespaces são a forma lógica de organizar o código-fonte em .NET. Toda a biblioteca de classes da .NET está estruturada em uma hierarquia de namespaces que tem como base o namespace System, onde se encontram as classes básicas da .NET. Fisicamente, os namespaces são armazenados em assemblies, que, por sua vez, são armazenados no sistema de arquivos como DLLs (bibliotecas de ligação dinâmica) ou como arquivos executáveis (.exe) que correspondem a aplicações propriamente ditas no ambiente .NET.
Quando uma aplicação é organizada logicamente usando namespaces, este deve possuir pelo menos uma classe que implemente o método Main( ), para aplicações console, ou WinMain( ), para aplicações Windows. Por sua vez, uma biblioteca de classes é implementada usando namespaces, mas nenhuma das suas classes membros implementa o método Main( ) ou WinMain( ), e elas são usadas para implementar código reutilizável.
Assim como as classes contêm membros, os namespaces também, os quais podem ser dos seguintes tipos:
Ainda podemos usar a cláusula using para criar um alias de um namespace quando, ao incluirmos dois namespaces diferentes, a referência a um dos membros cujo identificador existe em ambos namespaces se torna ambígua pelo fato de que os nomes são idênticos. No exemplo a seguir, vamos assumir que o namespace1 e namespace2 contêm ambos uma classe chamada clA. Vejamos o código para entendermos melhor o problema:
using namespace1;
using namespace2;
clA ClasseA1 = new A( );
clA ClasseA2 = new A( );
Mas o problema é que o compilador não sabe a partir de qual classe desejamos criar uma instância, se a pertencente ao namespace1 ou ao namespace2. Podemos resolver esse problema de duas formas, vejamos:
Solução 1:
using namespace1;
using namespace2;
namespace1.clA ClasseA1 = new A( );
namespace2.clA ClasseA2 = new A( );
Resolvemos o problema qualificando completamente o nome da classe, ao incluirmos o nome do namespace ao qual pertence. O problema desta solução é que se o nome do namespace for muito grande, por exemplo System.Collections. Specialized, e a classe clA tiver muitos membros estáticos, teremos que digitar o nome do namespace a cada vez que quisermos referenciar a classe.
Solução 2:
using NA1 = namespace1;
using NA2 = namespace2 ;
NA1.clA ClasseA1 = new A( );
NA2.clA ClasseA2 = new A( );
Na solução 2 usamos um alias para o namespace e dessa forma resolvemos a chamada ambígua da classe clA.
Meu primeiro post
Publicado por julianomarcon em Sem categoria em 29 de dezembro de 2009
Realmente a simplicidade de postagem do Posterous é impressionante!