2012-04-26 54 views
2

我有一個庫的一些方法,並在某些錯誤期間,我希望它調用調用方定義的方法。這個方法必須返回一個布爾值。我的意思是:將方法作爲參數傳遞,以便以後可以調用該方法?

Sock sock = new Sock(); 
sock.OnSpecificError(theMethodToCall); 

然後當錯誤發生,襪子應先檢查,看看是否OnSpecificError已設置。如果有,它應該運行它。如果該方法返回false或者如果OnSepcificError沒有被設置,它應該拋出一個異常。

這似乎是委託人設計的那種事情,但無論出於什麼原因,我似乎都無法理解那些實際正在做的事情,例如,傳遞什麼以及如何傳遞稍後運行它。我目前處理這種方法是愚蠢和繁瑣的,所以任何幫助將不勝感激。

編輯: 讓我澄清一下。 sock.OnSpecificError(方法)用於簡單地傳遞一個方法,它將存儲但不運行。這個想法是後來的,而sock運行其他一些方法,如果彈出錯誤,它應該運行該方法。我想保留稍後使用的方法,然後在需要時運行它。

回答

3

從代表開始的最簡單方法是使用預定義的代碼。例如,不帶參數並返回bool的委託將爲Func<bool>。代表stringint,並返回bool的代表將爲Func<string,int,bool>,依此類推。

定義你的方法是這樣的:

void OnSpecificError(Func<bool> errorCheck) { 
    // Do your stuff... 
    var gotErrors = errorCheck(); 
    if (gotErrors) { 
     // Do something about it 
    } 
} 

現在,您可以撥打OnSpecificError這樣的:

sock.OnSpecificError(CheckForErrors); 

private bool CheckForErrors() { 
    return errorCode.Equals("YES"); 
} 

您還可以使用lambda表達式內聯小方法,如:

sock.OnSpecificError(() => errorCode.Equals("YES")); 
+0

好吧,我想我得到這個,讓我試一試一定要知道。所以Func <>是一個預定義的委託? 「>」在C#的世界中意味着什麼?我從來沒有能夠得到一個好的答案,因爲谷歌勉強當我嘗試谷歌<> – cost 2012-04-26 21:40:02

+0

其實不,我不是在尋找。看看我對我的回答所做的修改,我試圖澄清。 – cost 2012-04-26 21:48:02

+0

@cost''''是*泛型參數*的地方。 'Func <>'是一組預定義的泛型委託類型。您可以通過提供一個或多個類型參數來指示參數類型和委託的返回類型來擴展它。 – dasblinkenlight 2012-04-26 21:48:23

相關問題