A linguagem C# introduziu a funcionalidade de tipos genéricos com a versão 2.0, permitindo que desenvolvedores escrevam código mais flexível e reutilizável. Os tipos genéricos permitem que você escreva uma classe ou método que funciona com qualquer tipo de dados, em vez de estar preso a um tipo específico. Isso permite que o código seja escrito de forma mais genérica, o que aumenta a sua reutilização.
Para entender melhor, vamos dar um exemplo de uma classe simples para gerenciar uma lista de objetos. Sem o uso de tipos genéricos, seria necessário escrever uma classe para cada tipo de objeto que desejássemos gerenciar. Por exemplo, uma classe "ListaDeInteiros", outra "ListaDeStrings", e assim por diante. Com o uso de tipos genéricos, é possível escrever uma única classe "Lista<T>" onde T é o tipo genérico. Isso significa que a classe pode ser usada para gerenciar uma lista de qualquer tipo de objeto, sem precisar escrever uma classe específica para cada tipo.
A sintaxe para criar uma classe genérica é simples, basta adicionar um identificador dentro dos sinais de menor/maior o nome da classe, como no exemplo abaixo:
class Lista<T> {
// ...
}
E para utilizar essa classe, é necessário especificar o tipo que deseja utilizar, como no exemplo abaixo:
Lista<int> minhaListaDeInteiros = new Lista<int>();
Lista<string> minhaListaDeStrings = new Lista<string>();
Além de classes, também é possível criar métodos genéricos. A sintaxe é semelhante, basta adicionar um identificador genérico dentro dos sinais de menor/maior após o nome do método, como no exemplo abaixo:
class MinhaClasse {
public T MetodoGenerico<T>(T valor) {
// ...
}
}
Os tipos genéricos também possuem restrições, é possível restringir o tipo genérico a uma classe base ou interface específica, ou especificar que o tipo genérico deve ter um construtor sem parâmetros.
Mais exemplos
Criando uma classe genérica de pilha (Stack) que pode armazenar qualquer tipo de dado:
class Stack<T>
{
private T[] _items;
private int _count;
public void Push(T item)
{
_items[_count++] = item;
}
public T Pop()
{
return _items[--_count];
}
}
Usando o tipo genérico "T" para especificar o tipo de dado de uma lista:
List<int> numbers = new List<int>();
numbers.Add(1);
numbers.Add(2);
Criando uma interface genérica para comparação de objetos:
interface IComparer<T>
{
int Compare(T x, T y);
}
>
Usando tipo genérico para definir métodos genéricos
void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
Usando tipos genéricos em expressões lambda e delegações
Func<T, bool> filter = x => x > 0;
Conclusão
O uso de tipos genéricos é amplamente utilizado pela comunidade e oferece um grande poder de abstração e reutilização para nosso trabalho, utilize sem moderação ;-]
Comentários
Postar um comentário
Obrigado por Participar do programero, fique a vontade para agradecer, retificar, perguntar ou sugerir.