在调试用 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(..) 有两种实现。dynamic 关键字用于在运行时确定相应的实现。当我在调试并尝试单步调试代码时,调试器不会进入对应的 printOutImpl(..) 方法,除非在方法体中设置了断点。
所以我的问题是是否有禁用/修改这种行为的选项。设置(和删除)断点来强制调试器进入方法体真的很烦人。
谢谢!恐龙