c#2.0出現了匿名方法, 這在一定程度上節省了我們維護**上下文的精力, 也不需要思考為某個方法取什麼名字比較合適. 在fcl的一些方法中要求傳入乙個delegate型別的引數, 比如control.invoke或者control.begininvoke方法:
public object invoke(delegate method);
public iasyncresult begininvoke(delegate method);
在這種情況下, 如果不使用匿名方法, 則需要在**的上面先宣告乙個delegate void dosomething()方法, 然後可以在invoke方法中再用lambda表示式或者委託實現dosomething().
delegate void dosomething();
));}
這樣做可以是可以, 但使用匿名方法則更好, 最起碼看上去更簡潔.);}
上面的**會在編譯的時候出錯:cannot convert anonymous method to type 'system.delegate' because it is not a delegate type. 方法要求引數的是乙個委託(delegate)型別, 而現在傳遞的只是乙個匿名方法. 產生這個錯誤最根本的原因是編譯器在處理匿名方法的時候, 沒法推斷出這個委託的方法返回的是什麼型別, 也就不知道返回乙個什麼樣的委託.
要解決上面這個問題, 從根本上來說就是指定這個匿名方法將會返回什麼型別的委託, 有幾種方法:
1. 使用methodinvoke或者action);
} );}
methodinvoke和action都是方法返回型別為空的委託.
2. 可以給control定義乙個invoke的擴充套件方法
public static void invoke(this control control, action action)
呼叫的時候則可以這樣呼叫:
//使用委託
xxcontrol.invoke(delegate );
//使用lambda表示式
xxcontrol.invoke(()=>);
1.
2.
C 匿名方法與Delegate型別轉換錯誤
問題描述 c 2.0出現了匿名方法,這在一定程度上節省了我們維護 上下文的精力,也不需要思考為某個方法取什麼名字比較合適.在fcl的一些方法中要求傳入乙個delegate型別的引數,比如control.invoke或者control.begininvoke方法 0 public object inv...
C 匿名方法與Delegate型別轉換錯誤分析
問題描述 c 2.0出現了匿名方法,這在一定程度上節省了我們維護 上下文的精力,也不需要思考為某個方法取什麼名字比較合適.在fcl的一些方法中要求傳入乙個delegate型別的引數,比如control.invoke或者control.begininvoke方法 複製 如下 public object...
匿名類與擴充套件方法
var可以根據變數的初始值自動推斷區域性變數的型別 var只能定影區域性變數,而不能定義成員變數 定義的時候必須同時完成初始化,而不能使用var定義變數為null var本身並不是一種新的型別,只是用來修飾乙個可推斷出具體型別的區域性變數 var定義變數和object型別定義的區別 console....