class Program
{
static void Main(string[] args)
{
B foo = new B();
foo.DoWork();
Console.ReadLine();
}
}
public class A
{
public virtual void DoWork() { Console.WriteLine("A"); }
}
public class B : A
{
public override void DoWork() { base.DoWork(); Console.WriteLine("B"); }
}
StackOverflow例外が発生しないのはなぜですか?私が理解しているように、foo.DoWork()が呼び出され、次にbase.DoWork()が呼び出されます。これは仮想であり、クラスB.DoWork()メソッドでオーバーライドされ、スタックがオーバーフローするまでbase.DoWork()の呼び出しを繰り返します。 。このオーバーフローは、base(selfを呼び出す循環ループ)の代わりにこれを使用すると簡単に実現できます。この場合、仮想関数のオーバーライドを防ぐにはどうすればよいですか?