委託在現代程式碼中無處不在;委託是一種型別,它表示對具有特定引數列表和返回型別的方法的引用。開發人員使用委託將方法作為引數傳遞給其他方法。您可能熟悉的一個例子是事件處理程式。處理程式是可以透過委託呼叫的方法。委託讓我想起 C++ 的函式指標,當然委託是完全物件導向的。
有幾種方式來表示委託,例如,Func 委託。此泛型委託表示接受一個或多個引數並返回指定型別值的方法。下面是一個示例(帶有lambda表示式):
Func<int, int> Multiplier = n => n * 5; int val = Multiplier(5); Console.WriteLine(val);
這個概念的最新變體是 Action,它提供了更方便的簡寫。使用 Action時,不必顯式地定義一個用單個引數封裝方法的委託。下面是一個例子:
Action<string> outputFunc = GetOutputRoutine(); outputFunc("Hello, World!"); static Action<string> GetOutputRoutine() { return MyConsoleWriter; } static void MyConsoleWriter(string input) { Console.WriteLine("Console: {0}", input); }
所以,這是一堂很好的課,但我為什麼要提到這些呢?雖然我發現在編寫程式碼時像傳遞引數一樣傳遞方法很方便,但我也希望在除錯時更容易跟蹤。當然,您可以輕鬆地單步執行這些方法,但我通常希望在單步執行之前或之後快速導航到由委託表示的底層程式碼,隨著 Visual Studio 17.10 的最新更新,這非常容易。
當您在除錯時暫停時,您可以將滑鼠懸停在任何委託上並獲得一個方便的跳轉,這裡是一個帶有Func委託的示例。
在本例中,Go to Source 清楚地表明,您將被重定向回 lambda 表示式。
請注意,這不僅僅適用於託管程式碼的情況,它還支援 C++ 函式指標和 std::function。
我們感謝您的反饋,幫助我們改進 Visual Studio,使其成為您最好的工具!您可以透過開發者社群與我們分享反饋,透過傳送反饋來報告問題或分享您的建議,推動對新功能或現有功能的改進。
請在 Twitter 上與 Visual Studio Debugger 團隊保持聯絡。
原文連結:https://devblogs.microsoft.com/visualstudio/easily-navigate-code-delegates-while-debugging/