Metodi/tipi generici e vincoli
Scriva metodi e tipi generici; aggiunga vincoli con where T : … (class, struct, new(), interfaccia/classe base).
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()
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.
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
- Metodi/tipi generici e vincoli
- Varianza (in/out) con interfacce e delegate
- Tipi di riferimento nullable (consapevolezza) e annotazioni (pattern di C# 6)