Desenvolvimento - C#
Tipos referência no .NET - Certificação 70-536
Veja neste artigo como funcionam os chamados “tipos referência” do .NET Framework. Este assunto é abordado na prova para a certificação 70-536.
por Joel RodriguesA teoria
Tipos referência, ao contrário de tipos valor, não acessam diretamente seus valores na memória, eles acessam uma referência, também chamada de ponteiro que aponta para o valor, armazenado em outra região. O valor desse tipo de variável fica armazenado no stack, como nos tipos valor, porém o objeto referencia um endereço armazenado no heap. Quando igualamos duas variáveis de um tipo valor, não estamos utilizando outro espaço no heap, mas apontando para o mesmo endereço do valor já existente. Assim, quando dois objetos são igualados (A=B), temos um único valor no stack sendo referenciado por ambos.
O espaço utilizado no heap é gerenciado por uma ferramenta do .NET chamada Garbage Collector, que libera o espaço utilizado, removendo objetos que não são mais utilizados. Este processo é automático, mas também pode ser chamado a partir do método GC.Collect(), porém isso não geralmente não é necessário.
Existem cerca de 2500 tipos referência nativos no .NET. Podemos dizer que todo tipo que não derivar do System.ValueType é um tipo referência. Alguns dos tipos mais comumente usados são System.Object, System.String, System.Array, entre outros.
Trabalhando com strings
Strings, no .NET, são objetos fixos. Quando criamos um string, reservamos um espaço na memória para ele, quando alteramos essa variável, um novo endereço da memória é utilizado e o anterior é descartado. Dessa forma, não é difícil perceber que a memória vai sendo consumida aos poucos. Para evitar esse tipo de prática “não saudável”, utilizamos a classe StringBuider que cria strings flexíveis. Quando se adiciona um texto no StringBuilder, a instância se expande para suportar novos valores. Vejamos como utilizar essa classe que está contida no namespace System.Text:
Listagem 1: Usando a classe StringBuilder
StringBuilder sb = new StringBuilder(); sb.Append(“Olá. ”); sb.Append(“Isto é um StringBuilder.”); sb.AppendLine(“Esta é uma nova linha.”); MessageBox.Show(sb.ToString());
Ou seja, para recuperamos o valor contido no StringBuilder, basta chamar o método ToString().
Bom, este artigo foi de fato bem simples, porém este é um dos assuntos abordados na prova para a certificação 70-536 (capítulo 1, lição 2 do “Self-paced training kit”). Conhecer como funciona os tipos referência é também importante para o desenvolvimento de aplicações que utilizam corretamente os recursos do PC, não alocando memória desnecessária e reduzindo o processamento.
Por enquanto ficamos por aqui. Surgindo qualquer dúvida sobre o assunto abordado, sintam-se à vontade para comentar e questionar.
Um abraço e até o próximo artigo.