Ho semplici tre classi:Nuova parola chiave: perché il metodo derivato non viene chiamato?
class A
{
public virtual void Write()
{
Console.Write("A");
}
}
class B:A
{
public override void Write()
{
Console.Write("B");
}
}
class C : B
{
public new void Write()
{
Console.Write("C");
}
}
E io sono la creazione di oggetti e chiamando i loro metodi:
A a = new A();
a.Write();
A b = new C();
b.Write();
C c = new C();
c.Write();
E uscita sarà: ABC
Quello che non riesco a capire è motivo per cui questi il codice produce B
?:
A b = new C();
b.Write();
ho pensato che dovrebbe essere C
. Tuttavia, ho provato molte volte, ed è sempre B
.
Capisco che A b = new C()
crei un nuovo tipo di oggetto di C. Quindi l'output dovrebbe essere C. Oppure è un comportamento speciale chiamare il metodo sovrascritto quando lo usiamo senza il cast?
Perché succede? Poiché non abbiamo utilizzato alcun riferimento alla classe B
.
Perché è così che funziona la nuova parola chiave. https://msdn.microsoft.com/en-us/library/ms173153.aspx – AndyJ