當在調試編譯器(主要)C#編寫的,我注意到了以下問題,我試圖映射到一個簡化的代碼片斷:調試問題(VS2010)使用動態關鍵字
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(..)的兩個實現。動態關鍵字用於確定運行時的相應實現。當我正在調試並嘗試遍歷代碼時,調試器將不會輸入相應的printOutImpl(..)方法,除非在方法體中設置了斷點。
所以我的問題是是否有一個選項來禁用/修改這種行爲。真是惱人的設置(和刪除)斷點來強制調試器進入方法體。
謝謝! dinony
嗯,奇怪的......我可以在VS2010中重現這個問題,但我發現了一個解決方法:在執行'printOutImpl((dynamic)obj)之前進行調試;',如果我說進入特定的> System.Action '3.調用,它的工作。 – 2013-05-08 13:18:19
在VS2012中一切正常。 – 2013-05-08 13:28:13
@Tim S:我試過了 - 對我來說,調試器跳轉到反彙編:System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2。 – dinony 2013-05-08 13:40:26