- metodo della derivata sovrascrive il metodo della base, se viene richiamato quello della derivata
- definizione di un metodo "virtuale" nella classe base, cioé che permette un metodo con stesso nome anche nelle classi derivate: virtual
modificatore_accesso virtual tipo_valore NOME(parametri)
- definizione di un metodo "override" nella classe derivata, cioé che sovrascrive quello della classe base: override
modificatore_accesso override tipo_valore NOME(parametri)
a seconda che si dichiari un oggetto di tipo classe base oppure classe derivata, verrà richiamata la routine corrispondente secondo il principio del polimorfismo
esempio: metodo StampaMessaggio() nella classe base Persona e nella classe base Studente
public class Persona
{
public virtual void StampaMessaggio() {.....}
}
public class Studente : Persona
{
public override void StampaMessaggio() {.....}
}
- richiamare il metodo della base nel metodo della derivata, ridefinendolo: base
modificatore_accesso override tipo_valore NOME(parametri)si sovrascrive il metodo virtuale della base
{
base.metodo_base(); richiamo il metodo base che ha lo stesso nome del metodo in definizione
....; ulteriori istruzioni in aggiunta al metodo base
}
esempio: integro il metodo della base con ulteriore stampa a monitor
public override void StampaMessaggio()
{
base.StampaMessaggio(); richiamo metodo della classe base con stesso nome
System.Console.WriteLine("Matricola: " + mMatricola);
}
- nascondere un metodo della classe base: new
modificatore_accesso tipo_valore NOME(parametri)metodo della base (non si mette nulla)
modificatore_accesso new tipo_valore NOME(parametri)si ridefinisce il metodo nascondendo quello della base
esempio: integro il metodo della base con ulteriore stampa a monitor
public class Persona
{
public void StampaMessaggio()
{
System.Console.WriteLine("Nome: " + mNome + mCognome);
}
}
public class Studente : Persona
{
public new void StampaMessaggio()
{
System.Console.WriteLine("Matricola: " + mMatricola);
}
}