爲什麼下面的語法有效?Lambda with BackgroundWorker
BackgroundWorker bw = new BackgroundWorker();
String one = resultFromSomeMethod();
String two = resultFromOtherMethod();
String three = resultFromThirdMethod();
bw.DoWork += (a,b) => TestMethod(one, two, three);
其中TestMethod的定義爲:
private void TestMethod(String one, String two, String three){
//Do Stuff!!
}
DoWorkEventHandler
的被定義爲代表的是有兩個參數:對象發件人和EventArgs的。但是,上面的TestMethod不包含這樣的參數。根據我對委託人的理解,爲了創建一個新委託,該方法必須符合委託人的聲明。我似乎已經繞過了使用lambda的限制。如何以及爲什麼上面的語法工作,即使如果我嘗試創建一個new DoWorkEventHandler(TestMethod)
它肯定不會工作?
我在Lambda表達式上閱讀了Eric White的blog,但似乎沒有回答這個問題。
我明白,但TestMethod參數不在範圍內。 – KyleM
您將'TestMethod'參數封裝在與委託簽名匹配的函數中,因此它可以工作。這也被稱爲適配器模式,儘管它是一個簡單的例子。 – Haney
@Servy感謝您對這個缺失逗號的追蹤! – Haney