No, non voglio fare concorrenza ad Adrian, ma volevo fare un piccolo quiz anche io. In realtà è una vecchissima roba che ho trovato nel mio HD, era una mia perplessità al tempo del framework 1.0, in particolare perché venivo da un lungo periodo di C++. La domanda è questa, io ho una classe Base con un metodo AMethod() che non accetta parametri. Io voglio fare una classe Derived che eredita da base, dichiara un metodo chiamato sempre AMethod() che accetta un parametro di tipo stringa. Quello che voglio è che l'utilizzatore di Derived non sia più in grado di chiamare il metodo AMethod senza parametri della classe base, ma sia sempre obbligato a chiamare la nuova versione. In sostanza voglio che il codice seguente generi errore di compilazione
class Base {
public void AMethod() {
Console.WriteLine("Base::AMethod");
}
}
class Derived : Base {
public void AMethod(String param) {
Console.WriteLine("Base::AMethod param={0}", param);
}
}
class Foo {
static void Main() {
Derived D = new Derived();
D.AMethod();
Console.ReadKey();
}
}
Naturalmente lo snippet precedente compila e viene chiamato correttamente il metodo della classe base, la domanda è, cosa posso aggiungere alla classe Derived per fare in modo che il chiamante sia forzato a utilizzare la versione di AMethod() che accetta una stringa e non possa chiamare più la versione della classe base?
Non so se è un quiz interessante, al tempo mi richiese una mezzoretta di smattimento per trovare una soluzione e lo trovai interessante tanto da fare una discussioncina su gotdotnet, tra l'altro il codice originale era in Visual Basic :D
Alk.
P.S. Mea culpa, non avendo letto tutti i quiz di adrian, spero di non avere fatto un doppione (dato che adrian ha fatto un gran quantitativo di quiz che coprono un po' tutto) :P :P.