1,匿名方法
c#為委託提供一種機制,可以為委託定義匿名方法,匿名方法沒有名稱,編譯器會定指定乙個名稱
匿名方法中不能使用跳轉語句跳轉到該匿名方法的外部,也不能跳轉到該方法的內部。
也不能在匿名方法外部使用的ref和out引數
2,匿名方法的【λ(拉姆達)表示式】方式定義
c#3.0之後匿名方法可以使用λ表示式來進行定義
無論是拉姆達(lambda)表示式(事實上應該叫匿名函式)或是匿名類,都能歸屬到一種叫閉包的東西上面。
λ運算子 =>
左邊是引數,使用括號表達 (string param),可以是 (param)這樣不定義型別,編譯器會推斷出來,只有乙個引數的時候可以不使用括號
右邊是實現**,使用花括號,如果**只有一行,則不使用花括號和return關鍵字也可以,編譯器會為我們新增
這是λ表示式的簡單實現
string str1 = " 匿名方法外部 ";
string str2 = " 匿名方法內部 ";
mydelagate my = param => param + str1 + str2;
console.writeline(my(" 引數 "));
3,委託呼叫過程的協變和抗變
關於委託的返回型別和委託方法的引數傳遞,如果我們不能正確使用的時候,經常會發生「協變和抗變」的錯誤。
需要額外注意
返回型別:返回型別需要注意的是協變
方法的返回型別可以派生於委託定義的型別。
引數型別:引數型別需要注意的是抗變
向委託傳遞的引數型別可以派生於委託方法的引數型別
返回型別的協變
引數型別的抗變
//實際上繼承自a的型別b的例項可以轉化為a,而子類向父類轉化的過程,在預設情況下會有編譯錯誤
//如下**
a aa = new a();
b bb = new b();
//這句沒問題
aa = bb;
//子類向父類轉化的過程中存在問題
bb = aa;
以上協變和抗變都是由這個原因產生的
c 匿名方法用途 C 匿名方法
我們討論了使用委託來引用具有與委託相同簽名的任何方法。換句話說,您可以使用該委託物件呼叫可由委託引用的方法。匿名方法提供了一種將 塊作為委託引數傳遞的技術。匿名方法是沒有名稱的方法,只是主體。您無需在匿名方法中指定返回型別 它是從方法體內的return語句推斷出來的。編寫匿名方法 匿名方法是通過建立...
c 匿名方法用途 C 匿名方法
c 語言 的 c 匿名方法 前面我們學習過,委託可用於引用任何與委託簽名相同的方法。換句話說,可以呼叫可以由委託使用該委託物件引用的方法。匿名方法提供了一種將 塊作為委託引數傳遞的技術。匿名方法是沒有名稱的方法,只有方法體。不需要在匿名方法中指定返回型別 它是從方法體中的return語句來推斷的。編...
c 匿名方法
例如下面這兩個例子 不使用匿名方法的委託 using system using system.collections.generic using system.linq using system.text namespace delegate int otherdel int param publi...