Por que eu devo ler este artigo: Listas genéricas
Neste artigo serão apresentados os benefícios da utilização delistas genéricas no .NET, com uma explicação prévia de conceitos fundamentais paraa compreensão deste recurso. Começaremos falando sobre a memória da aplicaçãopara então abordarmos os conceitos de value type e reference type, dando todo oembasamento necessário para a compreensão dos recursos de boxing e unboxing. A partir daí detalharemos o uso das listas genéricas, que são usadas paraarmazenamento de objetos em memória, desde a sua conceituação até a suaimplementação, através de um exemplo prático e objetivo onde onstruiremos umcadastro de pessoas em memória fazendo uso de diversos métodos da classe List.


Em que situação o tema é útil:
Este tema é útil para qualquer projeto de software que venha a fazer uso de listas de objetos em memória, auxiliando o desenvolvedor na compreensão do funcionamento e dos recursos disponíveis para manipulação de listas, podendo ser utilizado, como por exemplo, para a criação de cache de objetos em memória, possibilitando o aumento da performance da aplicação.

Tradicionalmente no desenvolvimento de software nós temos a necessidade de trabalhar com estruturas de dados que agrupam uma série de elementos. Inicialmente, nos tempos da programação estruturada, nós tínhamos à nossa disposição apenas os arrays, que nos permitiam armazenar informações dentro de uma estrutura indexada que fornecia métodos básicos para inserir, remover e recuperar tais informações.

Com a chegada da orientação a objetos este cenário mudou e diversas implementações surgiram para trabalharmos com listas de objetos. Tais objetos passaram a ser disponibilizados diretamente pelas APIs das principais linguagens, como .NET e Java.

Lista é uma relação de objetos que podem representar Pessoas, Carros, Bicicletas, tipos Inteiros, Strings, Decimais, dentre outros, ou seja, elas permitem que uma lista de objetos seja armazenada e manipulada em memória.

Antes de entrarmos no mérito das listas, vamos ver melhor alguns conceitos fundamentais para a compreensão das mesmas.

Memória do Computador X Memória da Aplicação

A memória do computador é o local físico onde são alocados as instruções e dados utilizados pelos processos em execução na máquina. Em operação normal, esta memória contém partes do sistema operacional e algumas aplicações que estão sendo executadas.

A memória da aplicação é uma porção da memória do computador alocada pelo sistema operacional para rodar determinada aplicação. Essa memória está dividida em duas partes, Stack e Heap, conforme mostra a Figura 1.

Ilustração da divisão da memória da aplicação
Figura 1. Ilustração da divisão da memória da aplicação

O espaço da stack é onde ficam registradas as variáveis declaradas em nosso sistema. O local onde o conteúdo desta variável será armazenado vai depender se esta variável é de um value type ou um reference type.

Tipos de Dados por Valor (value type)

Uma variável declarada como um tipo de dados por valor é estruturada na memória para conter um valor diretamente, ou seja, quando declaramos variáveis do tipo int, string, char, byte e todos os tipos que derivam de System.ValueType, o valor destas variáveis fica alocado diretamente na Stack, sem overhead (sobrecarga) de busca na heap, fazendo com que os mesmos sejam mais leves, conforme podemos observar na Figura 2.

Exemplo de alocação de value type
Figura 2. Exemplo de alocação de value type

Tipos de Dados por Referência

Uma variável declarada como um tipo de dados por referência é estruturada para conter uma referência para um objeto existente na Heap, ou seja, quando criamos um tipo através de palavras reservadas (Class, interface, array, delegate, etc.) estamos criando um tipo de referência. Estes ficam localizados na memória Heap quando instanciados e criam um endereço na Stack que aponta para um determinado local na ...

Quer ler esse conteúdo completo? Tenha acesso completo