using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication3 { class Cuoco { public void Pasta(string condimento) { Console.WriteLine("Io cucino pasta con " + condimento); Console.ReadLine(); } } class Apprendista : Cuoco { } class Program { static void Main(string[] args) { Cuoco Mario = new Cuoco(); Apprendista Antonio = new Apprendista(); Mario.Pasta("broccoli"); Antonio.Pasta("sugo"); } } }
Io cucino pasta con broccoli Io cucino pasta con sugo
Bene.
Adesso il solito apprendista rompiscatole innovativo si inventa l'idea di cucinare la pasta con due condimenti, come quello del Ristorante del C++...
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication3 { class Cuoco { public void Pasta(string condimento) { Console.WriteLine("Io cucino pasta con " + condimento); Console.ReadLine(); } } class Apprendista : Cuoco { public void Pasta(string condimento, string condimento2) { Console.WriteLine("Io cucino la pasta con " + condimento + " e " + condimento2); Console.ReadLine(); } } class Program { static void Main(string[] args) { Cuoco Mario = new Cuoco(); Apprendista Antonio = new Apprendista(); Mario.Pasta("broccoli"); Antonio.Pasta("sugo"); Antonio.Pasta("aglio", "olio"); } } }
Io cucino pasta con broccoli Io cucino pasta con sugo Io cucino la pasta con aglio e olioEcco: diversamente da quanto avveniva in C++, che in presenza di un altro metodo con lo stesso nome, sia pur con parametri diversi, si annullava il metodo ereditato, qui non si annulla, viene overloadato. E questa è una prima importante differenza (forse la maggiore, prima delle interfacce).
Quindi quando l'Apprendista è solo al ristorante, e arriva il cliente tradizionalista, lui può accontentarlo anche senza bisogno di ridichiarare il metodo rapportandolo al metodo del maestro Cuoco: il metodo ereditato viene overloadato dal nuovo metodo con lo stesso nome!
Nessun commento:
Posta un commento