DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da .net Magazine DIGITAL
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!

Revista MSDN Magazine Edição 02 - Tipos de Array no .NET

Artigo Originalmente Publicado na MSDN Magazine Edição 02

msdn02_capa.jpg

Clique aqui para ler todos os artigos desta edição

 

Tipos de Array no .NET

por Jeffrey Richter

 

Arrays, ou vetores, são mecanismos que permitem tratar vários itens como uma única coleção. O CLR (Common Language Runtime) suporta arrays unidimensionais, multidimensionais e jagged arrays (arrays de arrays). Todos os tipos de arrays derivam implicitamente de System.Array, que por sua vez deriva de System.Object. Isso significa que todos os arrays são sempre tipos de referência que são alocados no managed heap, e a variável do seu aplicativo contêm apenas uma referência ao array, e não o array propriamente dito. O exemplo a seguir ilustra melhor esse ponto.

 

Int32[] myIntegers;            // Declara a referência do array

myIntegers = new Int32[100];   // Cria o array com 100 Int32s

 

Na primeira linha, myIntegers é uma variável que é capaz de apontar para um array unidimensional de Int32. Inicialmente, myIntegers será definido como nulo (null) já que eu não aloquei um array. A segunda linha mostrada acima aloca um array de 100 valores do tipo Int32; todos os Int32 são inicializados com 0. Embora os Int32 sejam tipos de valor, o bloco de memória que possui tamanho suficiente para armazenar esses valores é alocado a partir da managed heap. O bloco de memória contém 100 valores Int32 unboxed. O endereço desse bloco de memória é retornado e salvo na variável myIntegers. Você também pode criar arrays de tipos de referência conforme a abaixo. 

 

Control[] myControls;       // Declare a referência do array

myControls=new Control[50]; // Cria o array com 50 referências Control

 

Na primeira linha, myControls é uma variável que é capaz de apontar para um array unidimensional de referências de Control. Inicialmente, myControls será definido (setado) como nulo (null) já que eu não declarei um array. A segunda linha aloca um array de 50 referências de Control; todas essas referências são inicializadas como nulas. Como Control é um tipo de referência, a criação do array cria apenas referências; os objetos reais não são criados nessa hora. O endereço desse bloco de memória é retornado e salvo na variável myControls.

 

image001.gif

Figura 1. Arrays na Managed Heap

 

A Figura 1 mostra como os arrays de tipos de valor e os arrays de tipos de referência aparecem na managed heap. Veja que o array Controls está apenas alocado na memória, sem os devidos valores atribuídos. Para atribuir os controles ao array myControls, execute as seguintes linhas:

 

 

 

 

myControls[1] = new Button();

myControls[2] = new TextBox();

myControls[3] = myControls[2]; // 2 elementos referindo-se ao mesmo objeto

myControls[46] = new DataGrid();

myControls[48] = new ComboBox();

myControls[49] = new Button();

 

A compatibilidade com a CLS (Common Language Specification) requer que todos os arrays sejam baseados em zero (zero-based). Isso permite que um método escrito em C# crie um array e passe sua referência ao código escrito em outras linguagens, como o Visual Basic®. Além disso, como os arrays baseados em zero (zero-based) são de longe os mais comuns, a Microsoft dedicou um tempo enorme na otimização de seu desempenho. No entanto, o CLR suporta arrays baseados em valores diferentes de zero (non-zero-based), embora eles não sejam recomendados. Para aqueles que não estão preocupados com o desempenho e com a portabilidade entre linguagens, mais a frente nesta seção demonstrarei como criar e usar arrays baseados em valores diferentes de zero.

Na Figura 1, você notará que cada array possui alguma informação de overhead adicional associada a ele. Essas informações contêm a classificação do array (número de dimensões), os limites inferiores de cada dimensão do array (quase sempre 0) e o comprimento de cada dimensão. O overhead também contém o tipo de cada elemento do array. Em poucas palavras, mencionarei a seguir os métodos que permitem que você consulte essas informações do overhead.

 Até agora, mostrei apenas exemplos de como criar arrays unidimensionais. Sempre que possível, você deve tentar manter-se fiel a esses tipos de array (unidimensionais, baseados em zero), também conhecidos como arrays SZ ou vetores. Faço essa recomendação porque os arrays SZ proporcionam o melhor desempenho, já que existem instruções de linguagens intermediárias (IL) específicas (como newarr, ldelem, ldelema, ldlen e stelem) para manipulá-los. No entanto, se preferir trabalhar com arrays multidimensionais, você pode fazê-lo. Veja aqui alguns exemplos:"

A exibição deste artigo foi interrompida.

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da .net Magazine DIGITAL
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Jeffrey Richter
Jeffrey Richter (dot-net@microsoft.com) é autor de Programming Applications for Microsoft Windows (Microsoft Press, 1999) e co-fundador da Wintellect (http://www.Wintellect.com), empresa de treinamento, depuração (debugging) e consultoria em software. Jeff é especialista em programação/design em .NE...
O que você achou deste post?

    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03