(ほとんど) C# で記述されたコンパイラをデバッグしているときに、次の問題に気付きました。これを簡略化されたコード フラグメントにマップしようとしました。
public class Program
{
public abstract class Base
{
public abstract void foo();
}
public class A : Base
{
public override void foo()
{
Console.WriteLine("A");
}
}
public class B : Base
{
public override void foo()
{
Console.WriteLine("B");
}
}
public static void printOut(Base obj)
{
printOutImpl((dynamic)obj);
}
public static void printOutImpl(A aObj)
{
aObj.foo();
}
public static void printOutImpl(B bObj)
{
bObj.foo();
}
public static int Main(string[] args)
{
B bObj = new B();
printOut(bObj);
return 0;
}
}
基本的に、printOut(..) には 2 つの実装があります。dynamic キーワードは、実行時に対応する実装を決定するために使用されます。デバッグ中にコードをステップ実行しようとすると、メソッド本体にブレークポイントが設定されていない限り、デバッガーは対応する printOutImpl(..) メソッドに入りません。
したがって、私の質問は、そのような動作を無効/変更するオプションがあるかどうかです。ブレークポイントを設定 (および削除) して、デバッガーがメソッド本体に入るようにするのは本当に面倒です。
ありがとう!ディノニ