Generics

I generics c#

I generics consentono di sviluppare parti di codice independenti dal tipo dei dati e trovano la loro naturale applicazione nel riuso del codice.

Un contenitore di oggetti generici è indipendente dal tipo utilizzato: gli oggetti generici consentono di scrivere codice una sola volta e di poterlo riutilizzare con tutte le tipologie di dato passato in ingresso.

In questo articolo descriveremo come implementare classi / metodi generici.

Quando si crea un’istanza di una classe generica è necessario indicare il tipo dell’oggetto che dovrà essere gestito: l’indicazione viene data utilizzando il segnaposto generico T.

Supponendo di aver definito una classe generica, di averla chiamata ClasseGenerica e di voler gestire  un membro di classe di tipo stringa, la sintassi da utilizzare sarà simile alla seguente:

Nel caso di utilizzo della stessa classe con il membro di classe intero:

Possiamo paragonare all’utilizzo di una classe generica come all’implementazione della seguente classe:

La convenzione utilizzata in C# indica che i parametri di tipo debbano:

  • essere descrittivi
  • iniziare con la lettera T

Inoltre è possibile indicare i seguenti vincoli sui parametri:

  • “where T: struct” indica che l’argomento di tipo deve essere un tipo valore
  • “where T: class” indica che l’argomento di tipo deve essere un tipo riferimento
  • “where T: new()” indica che l’argomento di tipo deve disporre di un costruttore publico privo di parametro: se utilizzato insieme ad altri vincoli deve essere indicato per ultimo.
  • “where T: nome_classe” indica che l’argomento di tipo deve corrispondere alla classe indicata oppure derivare da essa
  • “where T: nome_interfaccia” indica che l’argomento di tipo deve corrispondere all’interfaccia indicata oppure implementarla
  • “where T: U” indica che l’argomento di tipo fornito per T deve corrispondere a quello fornito per U

L’utilizzo di tipi generici può anche essere estesa alla definizione di metodi e delegati generici.

Di seguito un esempio di metodo generico:

e di delegato generico:

 

Pubblicato da

Andrea Merlin

Laureato in informatica, diversi corsi di specializzazione legati allo Sviluppo Software e alla Computer forensics. Appassionato di nuove tecnologie, amo la programmazione, la Business Intelligence e tematiche legate alla Privacy.Sempre alla ricerca di nuove idee, stimoli … e progetti da seguire!Amo trascorrere il tempo libero in Val Borbera, un piccolo angolo del Piemonte, in provincia di Alessandria.