Ho provato il seguente pezzo di codice
public abstract class Entry3
{
public abstract void Method1();
public virtual void Method2() { Console.WriteLine("Entry3.Method2"); }
}
public abstract class Entry31 : Entry3
{
public override void Method1()
{
Console.WriteLine("Entry31.Method1");
}
public virtual void Method2() { Console.WriteLine("Entry31.Method2"); }
}
public class Entry32 : Entry31
{
public override void Method1()
{
Console.WriteLine("hi");
}
public override void Method2() { Console.WriteLine("Entry32.Method2"); }
}
public class Main4
{
public static void Main()
{
Entry32 e32 = new Entry32();
e32.Method1();
//((Entry31)e32).Method1();
((Entry3)e32).Method1();
e32.Method2();
((Entry31)e32).Method2();
((Entry3)e32).Method2();
Console.ReadKey();
}
}
La risposta era "Entry3.Method2" per l'ultima riga ((Entry3)e32).Method2();
. Ho scavalcato la base Entry31
Method2 in Entry32. C # sta rilevando che Entry3
Method2 non viene sovrascritto in Entry32 e chiama Entry3.Method2. Qualcuno può aiutarmi a capire questo comportamento