Tipi generici

Permettono di definire tipi e metodi generici, tali parametri sono segnaposto che verranno sostituiti dai nomi dei tipi esatti da utilizzare al momento della creazione.

classi

public class TClienti<TCodice>
{
  private TCodice[] codice;
  public TCodice this[int index]
  {
    get { return codice[indx]; }
  }

  public TClienti(int len)
  {
    codice = new TCodice[len]
  }
}

In questo esempio la classe TClienti utilizza un parametro, fondamentale indicare quale sarà il ruolo dei parametri. Una classe generica può essere ereditata come una classe qualunque e può aggiungere nuovi parametri.

public class TSedeClienti<TCodice, TSede>: TClienti<TCodice>
{
...
}

Ad ogni parametro di tipo può essere sostituito un qualunque tipo argomento, potrebbe essere problematico assegnare un valore predefinito. L’operatore default restituisce il valore oredefinito di un tipo qualunque:

public class TClienti
{
  private TCodice codice;
  public TClienti()
  {
    codice = defaul(TCodice)
...

metodi

Un metodo generico è utile quando si vuole rendere generico un algoritmo.

public TCodice codCli<TCcodice>(TClienti codice)
{
  return default(TCodice);
}
...
int i = codCli <int>(5);

interfacce

Consentono di scrivere interfacce in cui le firme dei metodi contengono parametri di tipo, sia come parametri formali sia come tipi di ritorno.

public interface IScambia<Tuno, Tdue>
{
  Tdue IScambia(Tuno dato);
}

struct

Possono essere implementate in maniera generica seguendo le regole già viste.

delegate

questo argomento verrà approfondito successivamente, un oggetto che rappresenta una famiglia di metodi dalla firma ben specificata.

Per ultimo parliamo delle enumerazioni, tale requisito è sodisfatto tramite l’implementazione delle interfacce IEnumerable<T> e IEnumerator<T>. Il metodo GetEnumerator restituisce un oggetto enumeratore, mentre MoveNext si sposta a quello successivo e Reset ritorna alla posizione iniziale.

interface IEnumerator<T>: IEnumerator, IDosposable
{
  T Current { get; }
}

interface IEnumerable<out T>: IEnumerable
{
  IEnumerator<T> getEnumerator();
}

a

Follow by Email
Facebook
Twitter
Telegram