我想要做的是對各種對象之一執行方法,但在方法調用之前和之後,我需要執行函數來執行各種維護任務。前後運行的函數總是相同的。該方法的返回類型和參數幾乎可以是任何東西。具有靈活簽名的C#代表
目前,我通過爲我使用的每種可能的方法簽名定義代表來做到這一點,而且這樣做的確令人感到非常尷尬。這是一個例子:
protected delegate void DelVoidString(string string1);
protected void Execute(DelVoidString p, string string1)
{
PreInvoke();
p.Invoke(string1);
PostInvoke();
}
除了簽名之外,所有這些簽名都是相同的。所以我的問題是:有沒有更好的方法來做到這一點?只要我有一些在需要它們的方法調用之前和之後執行PreInvoke()和PostInvoke()的方法,而不必記住每一次寫出代碼,我都不會使用委託。
我對Lambda表達式只有一種模糊的認識......他們能幫我在這裏更好嗎?或者我錯過了其他驚人的東西?謝謝!
一般動作
的一個實例肯定會有所減少的代碼。我不知道它們可能是通用的。有一些情況下返回值不是無效的,但這些情況很少。 我發現後我發現的另一個:那麼Delegate.DynamicInvoke呢?速度不是問題,那麼這可能是一種可能性嗎? – RobinHood70 2012-04-26 04:11:13
我更新了我的答案來處理返回值。 Delegate.DynamicInvoke是一種可能性,但如果您傳遞了不正確的參數數目,編譯器將無法警告您。 – 2012-04-26 04:15:56
謝謝,我認爲隨着你的改變,這可能是最好的選擇。 – RobinHood70 2012-04-26 04:22:04