Comportamenti polimorfici
Utilizzi il polimorfismo basato su interfacce: elabori uniformemente forme miste, aggiunga nuove forme senza modificare chi utilizza il codice e componga piccoli comportamenti.
Comportamenti polimorfici è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 3 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 sul polimorfismo
Obiettivo: utilizzare il polimorfismo per mantenere semplici i chiamanti.
- Utilizzi IShape ovunque
- Combini molte forme in un'unica lista
- Aggiunga nuove forme senza modificare il codice
- Componga piccoli comportamenti (formattazione, filtraggio)
Un'unica API per tutte le forme
Accetti l'interfaccia IShape negli helper. Il dispatch a runtime seleziona l'implementazione corretta.
using System;
public interface IShape
{
double Area();
double Perimeter();
}
public sealed class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h) { _w = w; _h = h; }
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
public sealed class Circle : IShape
{
private readonly double _r;
public Circle(double r) { _r = r; }
public double Area() { return 3.14159 * _r * _r; }
public double Perimeter() { return 2 * 3.14159 * _r; }
}
public class Program
{
// One function works for any IShape (dynamic dispatch on overrides)
static void PrintSummary(IShape s)
{
Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter());
}
public static void Main(string[] args)
{
PrintSummary(new Rectangle(3, 4));
PrintSummary(new Circle(2));
}
}
Elaborazione di una lista mista
Memorizzi molte forme in una List<IShape>. L'iterazione rimane semplice, mentre il comportamento varia in base all'istanza.
using System;
using System.Collections.Generic;
public interface IShape { double Area(); double Perimeter(); }
public sealed class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h) { _w = w; _h = h; }
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
public sealed class Circle : IShape
{
private readonly double _r;
public Circle(double r) { _r = r; }
public double Area() { return 3.14159 * _r * _r; }
public double Perimeter() { return 2 * 3.14159 * _r; }
}
public class Program
{
public static void Main(string[] args)
{
List<IShape> shapes = new List<IShape>();
shapes.Add(new Rectangle(2, 5));
shapes.Add(new Circle(1.5));
shapes.Add(new Rectangle(1, 1));
foreach (IShape s in shapes)
{
Console.WriteLine("A=" + s.Area());
}
}
}
Estensione aperta
Il polimorfismo favorisce l'estensione aperta: le nuove forme si integrano senza modificare i chiamanti esistenti.
using System;
public interface IShape { double Area(); double Perimeter(); }
public sealed class Triangle : IShape
{
private readonly double _a, _b, _c;
public Triangle(double a, double b, double c) { _a = a; _b = b; _c = c; }
public double Perimeter() { return _a + _b + _c; }
public double Area()
{
double s = (_a + _b + _c) / 2.0;
return Math.Sqrt(s * (s - _a) * (s - _b) * (s - _c));
}
}
public class Program
{
// Existing helper still works; no changes needed
static void Show(IShape s) { Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter()); }
public static void Main(string[] args)
{
Show(new Triangle(3, 4, 5)); // new type plugs in
}
}
Composizione dei comportamenti (strategia)
Componga piccoli comportamenti tramite interfacce ridotte (come un formatter). Sostituisca le strategie senza modificare la forma.
using System;
public interface IShape { double Area(); double Perimeter(); }
public sealed class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h) { _w = w; _h = h; }
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
// Small strategy interface for formatting
public interface IShapeFormatter
{
string Format(IShape s);
}
public sealed class SimpleFormatter : IShapeFormatter
{
public string Format(IShape s) { return "A=" + s.Area() + " P=" + s.Perimeter(); }
}
public class Program
{
static void Print(IShape s, IShapeFormatter f)
{
Console.WriteLine(f.Format(s));
}
public static void Main(string[] args)
{
Print(new Rectangle(3, 2), new SimpleFormatter());
}
}
Suggerimenti sul polimorfismo
Suggerimenti:
- Passi IShape agli helper; eviti i controlli sul tipo.
- Mantenga gli helper piccoli e, quando possibile, privi di effetti collaterali.
- Aggiunga liberamente nuove forme; non modifichi i chiamanti esistenti.
- Utilizzi piccole interfacce comportamentali (formattazione, filtraggio) per estendere le funzionalità.
Vantaggio dell'interfaccia
Riepilogo
Riepilogo: utilizzi IShape come tipo dei parametri, elabori liste miste e aggiunga forme senza modificare i chiamanti. Componga piccoli comportamenti per la formattazione o il filtraggio, così da mantenere flessibile il codice.
Domande Frequenti
La lezione «Comportamenti polimorfici» è gratuita?
Sì — il testo completo di «Comportamenti polimorfici» è 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 «Comportamenti polimorfici»?
Utilizzi il polimorfismo basato su interfacce: elabori uniformemente forme miste, aggiunga nuove forme senza modificare chi utilizza il codice e componga piccoli comportamenti. 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 3 di 3.
Quanto tempo richiede la lezione «Comportamenti polimorfici»?
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
- Progettazione (interfacce ed ereditarietà)
- Implementazione e test
- Comportamenti polimorfici