Tag Archives: INTERFACES

A Magia das Classes – System.Collections

System.Collections – Overview

Conheça o arsenal disponível para trabalharmos com os vários tipos de coleções. Entender as suas características nos ajudará a utilizar o melhor de cada um destes recursos. Vamos lá:

Definição

O namespace System.Collections provê classes, métodos e propriedades para trabalhar com estrutura de dados variáveis.

A Localização

A IEnumerable está localizado no namespace System.Collections;

Classes & Interfaces

As Collections são tratadas por Classes e Interfaces:

  • IEnumerable
  • IEnumerator
  • ICollection
  • IList
  • IDictionary

ICollection

As classes derivadas da interface ICollection:

  • Collections.Stack
  • Collections.Queue
  • Collections.BitArray
  • System.Collections.Specialized.NameValueCollection

IDictionary

Esta interface representa collections com pares valor/nome. As coleções que herdam a IDictionary incluem:

  • Collections.SortedList
  • Collections.Hashtable
  • Collections.Specialized.HybridDictionary
  • Collections.Specialized.ListDictionary

IList

Esta interface representa coleções com valor apenas. Algumas classes que herdam desta interface:

  • Array
  • Collections.ArrayList
  • Collections.Specialized.StringCollection

 

 

Generics – Type Placeholder

Características : Parâmetros para o tipo genérico

Características e conceitos úteis na implementação de Generics, o type parameter. Vamos lá:

Este é o elemento base na declaração de qualquer tipo Generic. Referido na documentação Microsoft como type placeholder.

Ele cria um local para que possamos informar qual é o type argument quando estamos criando uma instância de um tipo genérico. Sendo um dos elementos fundamentais para o uso de Generics, um type parameter possui regras de utilização.

Muitas destas regras são relacionadas com o contexto em que o type parameter é aplicado. Por contexto dizemos o tipo generic declarado, por exemplo, uma classe genérica. No entanto, algumas regras são comuns para qualquer contexto.

Nomes para o type parameter

Uma prática comum, e não obrigatória, é prefixar o nome do type parameter com T.

public class List <TItem>
{}

Agora eu tenho uma classe generic List com o type parameter TItem. A letra T significa (tipo).

Aqui estou criando um elemento que representa um tipo informado na criação da instância do tipo genérico.

Há quem não concorde com essa forma de prefixar o type parameter com a letra T. Mas, é uma prática muito utilizada.

Uma letra

Uma forma de declaração muito utilizada é apenas uma letra no nome do type parameter. Tudo bem,  uma letra apenas não é nada descritiva, mas em muitas situações o próprio tipo generic acaba facilitando a compreensão.

Um exemplo simples é um tipo genérico que descreve o conceito de Key/Value, como um dicionário. A declaração pode ser:

public class ReferenceTable < K, V >
{}

Ou:

public class ReferenceTable < TKey, TValue >
{}

Na utilização da letra T como prefixo padrão, veja que o restante do nome do parâmetro segue o padrão de nomenclatura Pascal Case.

Agora eu tenho uma classe genérica, ainda sem implementação.

Pronto! Acabamos de aprender mais um pouco sobre GENERICS e seus detalhes importantes.

Missão cumprida!