Molte volte mi sono stati chiesti chiarimenti riguardo la creazione di metodi virtuali, gli override e il modificatore new nella sintassi del metodo.
Il 99.9 % delle volte la situazione era un po confusa, quindi in questo post cercherò di spiegare in maniera accessibile a tutti la differenza tra le tre operazioni.
Avvaliamoci di un piccolo listato che di sicuro chiarirà le idee!
Come potete vedere, quando si parla di metodi virtuali e override c'è di mezzo SEMPRE l'ereditarietà,sono potenti strumenti della programmazione ad oggetti e vengono utilizzati abbondantemente!
Un metodo virtuale non è altro che un metodo, segnato in c# con la parola chiave virtual, che permette la modifica, o meglio la ridefinizione nelle classi che lo erediteranno.
Perchè ridefinire un metodo? Semplice, il metodo della classe base non soddisfa in parte le richieste della classe derivata.
Basti pensare al metodo virtuale ToString() (derivato dalla classe Object) che viene pesantemente ridefinito in quasi ogni classe creata dagli sviluppatori!
Ridefinendo il metodo ToString non si fa altro che effettuarne l'override!
Ad esempio, nella classe base del listato possiamo inserire il seguente codice :
public override ToString()
{
return "Versioning";
}
richiamando ora il metodo si otterrà il risultato "Versioning" :
Messagebox.Show(myDerivata.ToString());
Gli esempi da poter elencare sono tantissimi, eccone uno :
Il modificatore new invece è stato introdotto per poter "nascondere" i metodi omonimi nelle classi base, ed evitare l'alert del compilatore.
In pratica è possibile, ridefinire metodi non virtual, come potete vedere nel primo listato!
Ci sarebbero un po di cose da spiegare ma limitiamoci a capire che il modificatore new viene utilizzato quando si implementano dll scritte da terzi in cui sono presenti metodi non virtuali che vorremmo ridefinire a nostro piacimento e secondo le specifiche richieste dalla nostra classe, cosi facendo il nostro metodo nasconde (hide) il metodo base eseguendo l'implementazione da noi creata!
Stay Tuned!