c# - 使用动态关键字时的调试问题(VS2010)

标签 c# debugging dynamic-keyword

在调试(大部分)用 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(..) 方法,除非在方法体中设置了断点。

所以我的问题是是否有禁用/修改此类行为的选项。设置(和删除)断点以强制调试器进入方法体真的很烦人。

谢谢! 迪尼尼

最佳答案

使用“step into”(F11) 而不是“step over”(F10)。我测试了您的代码,它正确地进入了 printOutImpl(B bObj)Console.WriteLine("B");

关于c# - 使用动态关键字时的调试问题(VS2010),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16441537/

相关文章:

c#-4.0 - C# 4.0 Dynamic 与 Expando...它们适合哪里?

c# - UWP:BrightnessOverride StartOverride 逻辑

c# - ObjectListView 不显示所选项目的选择颜色

android - 在 Intellij IDEA 中调试 Android Widget

java - 调试时如何进入Android操作系统的源代码?

c# - 测试属性是否可用于动态变量

c# - 如何在包含不同签名但参数全部对应于同一类型的类型上构造接口(interface)

c# - 如何在异步等待 WEB API 中使用 FirstOrDefaultAsync()

windows - windows平台有pdb文件,为什么还要map文件?

Javascript 自动从 HTML 中选取关键字