Generic in C#

I generici sono una funzionalità potente di C# che consente di scrivere codice riutilizzabile e flessibile. In questa guida esploreremo cos’è un generico, i suoi vantaggi e come utilizzarlo in C#. Se sei agli inizi, questo articolo ti aiuterà a comprendere i concetti base dei generici.

Cos’è un generico?

Un generico permette di definire classi, metodi, interfacce o delegati senza specificare in anticipo i tipi di dati con cui lavoreranno. In questo modo, puoi utilizzare un solo pezzo di codice per operare su diversi tipi, senza duplicazioni.

Vantaggi dei generici

I vantaggi principali dei generici includono:

  • Riutilizzo del codice: consente di scrivere codice una sola volta e utilizzarlo per vari tipi di dati.
  • Sicurezza del tipo: grazie ai generici, il tipo di dato è verificato a compile-time, riducendo la possibilità di errori.
  • Prestazioni migliori: i generici eliminano la necessità di boxing/unboxing, migliorando così l’efficienza.

Sintassi di base dei generici

La sintassi dei generici in C# è semplice. Un generico viene dichiarato utilizzando una coppia di parentesi angolari (<>), all’interno delle quali viene specificato il tipo “parametro”. Vediamo alcuni esempi.

Classi generiche

Una classe generica è una classe che può lavorare con qualsiasi tipo di dato. Ecco un esempio di come dichiarare una classe generica in C#:

public class Box
{
    public T Value { get; set; }

    public Box(T value)
    {
        Value = value;
    }
}

In questo esempio, la classe Box accetta un tipo di dato generico T. Puoi creare un’istanza di Box con qualsiasi tipo, ad esempio Box<int> o Box<string>.

Metodi generici

Un metodo generico può accettare parametri di tipo generico. Ecco un esempio:

public T Add(T a, T b)
{
    return a; // Semplice esempio
}

In questo caso, il metodo Add può lavorare con qualsiasi tipo di dato specificato durante l’invocazione.

Interfacce generiche

Le interfacce generiche funzionano in modo simile alle classi generiche. Puoi definire un’interfaccia che utilizza tipi generici:

public interface IRepository
{
    void Add(T item);
    T GetById(int id);
}

Vincoli nei generici

I vincoli nei generici permettono di limitare i tipi che possono essere utilizzati come parametri generici, rendendo il codice ancora più sicuro e specifico.

Esempio di vincolo con where

Puoi utilizzare il vincolo where per specificare che il tipo generico deve implementare un’interfaccia o derivare da una classe specifica:

public class Repository where T : IEntity
{
    // Implementazione
}

Altri vincoli comuni

  • where T : struct – Il tipo generico deve essere un valore.
  • where T : class – Il tipo generico deve essere una classe.
  • where T : new() – Il tipo generico deve avere un costruttore senza parametri.

Generici e collezioni

Le collezioni generiche come List<T> sono un esempio pratico di generici in C#. Ecco un esempio di utilizzo:

Esempio di lista generica

List numbers = new List();
numbers.Add(1);
numbers.Add(2);

In questo caso, List<int> accetta solo elementi di tipo int, garantendo così la sicurezza del tipo.

Best practices

Quando utilizzi i generici, ci sono alcune best practices che dovresti seguire per scrivere codice più efficiente e leggibile.

1. Utilizzare generici per migliorare la sicurezza del tipo

I generici ti permettono di evitare l’uso di tipi generici come object, garantendo che solo il tipo corretto venga passato alle tue funzioni o classi.

2. Evitare il polimorfismo non necessario

Evita di utilizzare i generici per simulare il polimorfismo quando non necessario. I generici non dovrebbero essere una sostituzione del classico polimorfismo basato sull’ereditarietà.

3. Sfruttare i vincoli

Utilizza sempre i vincoli per limitare i tipi generici, assicurandoti che il tipo soddisfi le condizioni necessarie.

4. Documentare i vincoli

Assicurati di documentare correttamente i vincoli che imposti nei generici, in modo che il codice sia facilmente comprensibile per gli altri sviluppatori.

Corsi correlati

In Arrivo

Design Pattern per videogiochi

I Design Pattern sono soluzioni a problemi comuni che si incontrano nello sviluppo del software. Nel contesto dei videogiochi, questi pattern possono aiutare a gestire la complessità crescente dei giochi moderni. Sei appassionato di videogiochi? Hai mai pensato a come vengono progettati e sviluppati? Sei curioso di scoprire i segreti dietro la creazione dei tuoi giochi preferiti? Allora sei nel posto giusto! Questo corso è stato progettato per fornirti una solida comprensione dei Design Pattern, strumenti fondamentali per ogni sviluppatore di giochi. Attraverso esempi pratici e realistici, esploreremo insieme come questi pattern possono aiutarti a creare giochi più efficienti, flessibili e mantenibili.

In Arrivo

Corso Fondamenti di Python

Python, uno dei linguaggi di programmazione più popolari al mondo, è ampiamente utilizzato da colossi dell’informatica e della tecnologia come Google, la Nasa e Mozilla.
Questo corso sui fondamenti di Python esplorerà le ragioni del suo successo duraturo. Impareremo la potente ed espressiva sintassi di Python, che consente di ottenere risultati impressionanti con poche righe di codice.

In Arrivo

Blender Masterclass 2

I paesaggi, in generale, possono risultare intimidatori data la loro complessità, costituita da numerosi elementi che sembrano formare qualcosa di virtualmente infinito. Durante le lezioni di questo corso, ci concentreremo su una scomposizione delle diverse fasi coinvolte nella creazione di una scena, affrontandole una alla volta attraverso passi graduati.

In Arrivo

Blender Masterclass 1

In questo corso di Blender 3D, Masha, in collaborazione con Gedemy, vi mostrerà il processo di modellazione, UV mapping, shading, e texture painting di un asset. Una volta apprese le basi, vedremo anche come effettuare il baking delle textures e la preparazione con successivo export della mesh in modo che possa essere utilizzabile all’interno di un qualsiasi altro software.

Crea il tuo account gratuito Gedemy

Gedemy è la piattaforma di formazione che ti permette di sviluppare competenze verticali corsi in un unico piano realizzati da esperti in ambiti come Marketing, Business, Design, Tech, AI e molto altro.

Login

Oppure

Non sei ancora registrato?