Un generico è essenzialmente un parametro di tipo.
Scrivi - una classe, struct o enum.
Parametro : qualcosa che passi in un metodo.
Quindi un parametro di tipo è un tipo che si passa a un metodo. Perché questo è importante? Perché non basta passare object
variabili in giro? Per un paio di motivi.
- L'utilizzo di un parametro di tipo anziché di
object
evita la boxe.
- L'utilizzo di un parametro type preserva la sicurezza del tipo statico e consente l'inferenza del tipo.
Oltre a ciò, non c'è molto da dire. Devi pensare in termini di ciò che può essere fatto con gli oggetti genericamente , senza dover pensare al loro tipo.
Puoi metterli in una lista, senza riguardo al loro tipo? Certo che puoi. Poiché l'elenco prende oggetti dello stesso tipo, il tipo di elenco è determinato dal modo in cui si crea l'elenco e il tipo viene determinato in quel momento. Ad esempio:
var list = new List<string>();
crea un elenco di stringhe.
Puoi ordinare gli articoli nell'elenco? Ovviamente, finché il tipo specificato durante la creazione dell'elenco implementa l'interfaccia IComparable
.
list.Sort();
funziona perché String implementa IComparable
.
Naturalmente, puoi avere tipi composti in un elenco:
var list = new List<KeyValuePair<string, MyClass>>();
o tipi ricorsivi
public class Node<T>
{
public T Item { get; set; }
public List<Node<T>> Children { get; set; }
}