O que são genéricos em c #?

O que são genéricos em C #, ilustrados com um exemplo simples? Quais são alguns artigos ou sites relacionados para este tópico?

Generics refere-se à técnica de escrever o código para uma class sem especificar o (s) tipo (s) de dados em que a class trabalha.

Você especifica o tipo de dados quando declara uma instância de uma class genérica. Isso permite que uma class genérica seja especializada para muitos tipos de dados diferentes, tendo apenas que escrever a class uma vez.

Um ótimo exemplo são as muitas classs de coleção no .NET. Cada class de coleção tem sua própria implementação de como a coleção é criada e gerenciada. Mas eles usam genéricos para permitir que sua class trabalhe com collections de qualquer tipo.

http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx

Não há realmente nada de especial sobre genéricos em c #. O C # simplesmente gosta de pegar conceitos bem conhecidos e chamá-los de algo diferente (por exemplo, chamando procedimentos “methods estáticos” ou chamando flatMapSelectMany “). Neste caso particular, os genéricos são apenas o nome do C # para o polymorphism paramétrico rank-1.

Do MSDN:

Os genéricos são o recurso mais poderoso do C #. Os genéricos permitem que você defina estruturas de dados com proteção de tipos, sem se comprometer com tipos de dados reais. Isso resulta em um aumento significativo no desempenho e em um código de maior qualidade, pois você pode reutilizar algoritmos de processamento de dados sem duplicar o código específico do tipo. No conceito, os genéricos são semelhantes aos modelos C ++, mas são drasticamente diferentes em implementação e resources.

https://msdn.microsoft.com/pt-br/library/ms379564.aspx