C# Academy · Lezione

Metodi/tipi generici e vincoli

Scriva metodi e tipi generici; aggiunga vincoli con where T : … (class, struct, new(), interfaccia/classe base).

Lezione 1 di 38 passaggi

Metodi/tipi generici e vincoli è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 1 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 3 lezioni in totale.

Panoramica sui tipi generici

Obiettivo: riutilizzare il codice in modo sicuro con i tipi generici.

  • Metodi e tipi generici
  • Vincoli: class, struct, new(), interfaccia/classe base
  • Mantenga gli esempi brevi e chiari

Metodo generico

Un metodo generico ha un elenco di parametri di tipo, ad esempio Identity<T>, e funziona con molti tipi.

using System;

// Generic method works for any T
public class Program
{
  static T Identity<T>(T value)
  {
    // just returns what it got
    return value;
  }

  public static void Main(string[] args)
  {
    int a = Identity<int>(5);
    string b = Identity<string>("hi");
    Console.WriteLine(a + " & " + b);
  }
}

Tipo generico

Un tipo generico (come Box<T>) viene compilato una volta e utilizzato con molti tipi concreti.

using System;

// Simple generic type to hold a value
public sealed class Box<T>
{
  private T _value;
  public Box(T value) { _value = value; }
  public T Get() { return _value; }
  public void Set(T value) { _value = value; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Box<int> bi = new Box<int>(10);
    Box<string> bs = new Box<string>("ok");
    Console.WriteLine(bi.Get() + " | " + bs.Get());
  }
}

Vincolo new()

Aggiunga where T : new() se deve chiamare new T() all'interno del codice generico.

using System;

// Factory that can create T with a parameterless ctor
public static class Factory
{
  public static T Create<T>() where T : new()
  {
    return new T(); // allowed thanks to new() constraint
  }
}

public sealed class Person
{
  public string Name;
  public Person() { Name = "Anon"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Person p = Factory.Create<Person>();
    Console.WriteLine(p.Name);
  }
}

Vincolo su un'interfaccia

Limiti T a un'interface o a una classe base per poter chiamare i relativi membri (ad esempio IComparable<T>).

using System;

// Min for two values that can be compared
public static class Utils
{
  public static T Min<T>(T a, T b) where T : IComparable<T>
  {
    return a.CompareTo(b) <= 0 ? a : b;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(Utils.Min(5, 3));          // 3
    Console.WriteLine(Utils.Min("b", "a"));      // a
  }
}

Vincoli class/struct e suggerimenti

Altri vincoli:

  • where T : class → solo tipi riferimento
  • where T : struct → tipi valore non nullable
  • Combini i vincoli: where T : class, IDisposable, new()
  • Mantenga minime le API; per maggiore flessibilità, preferisca i vincoli sulle interfacce.

Significato del vincolo new()

Verifica rapida: quale vincolo consente di creare un nuovo T() all'interno del codice generico?

Riepilogo

Riepilogo: crei metodi e tipi generici e aggiunga vincoli per utilizzare i membri necessari: interfaccia/classe base per il comportamento, class/struct per il tipo e new() per chiamare un costruttore senza parametri.

Gratis per iniziare

Impara C# con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
93
Lezioni
346

Domande Frequenti

La lezione «Metodi/tipi generici e vincoli» è gratuita?

Sì — il testo completo di «Metodi/tipi generici e vincoli» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 3 lezioni in totale.

Cosa imparerò in «Metodi/tipi generici e vincoli»?

Scriva metodi e tipi generici; aggiunga vincoli con where T : … (class, struct, new(), interfaccia/classe base). Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 3.

Quanto tempo richiede la lezione «Metodi/tipi generici e vincoli»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Metodi/tipi generici e vincoli
  2. Varianza (in/out) con interfacce e delegate
  3. Tipi di riferimento nullable (consapevolezza) e annotazioni (pattern di C# 6)
← Torna a C# Academy