私のc#コードであいまいなランタイムクラッシュバグが発生しています。スタックトレースから、オーバーライドがスキップされることがまれにあり、代わりに基本クラスのメソッドが呼び出されているように見えます。擬似コードは次のようになります。
public class Widget : Gear
{
public override string Spin()
{
return "crunch";
}
}
public class Gear
{
public virtual string Spin()
{
return "whirr";
}
}
そして、私がこれを千回呼ぶと、次のようになります。
var widget = new Widget();
for (var i = 0; i < 1000; i++)
{
Console.WriteLine(widget.Spin());
}
代わりに、基本クラスを呼び出す反復が1回発生する可能性があります。
> ...
> crunch
> crunch
> crunch
> whirr
> crunch
> ...
現在、私の実際のシナリオはEntity Frameworkを使用しており、オーバーライドで何かが発生しなかったため、EntityContext.SaveChanges()メソッドでエラーが発生し、スタックトレースはオーバーライドがスキップされたことを示していますが、上記のコードは症状。
私の質問は次のとおりです。(1)これは可能ですか?(2)予防可能ですか?