如其他地方所述,委托是一種包裝方法調用的類型。就像類型一樣,可以在方法之間傳遞委托實例,并且可以像方法一樣調用委托實例。匿名函數是一個“內聯”語句或表達式,可在需要委托類型的任何地方使用。可以使用匿名函數來初始化命名委托,或傳遞命名委托(而不是命名委托類型)作為方法參數。
共有兩種匿名函數,以下主題中分別討論了這些函數:
-
說明:
Lambda 表達式可以綁定到表達式目錄樹,也可以綁定到委托。
在 C# 1.0 中,您通過使用在代碼中其他位置定義的方法顯式初始化委托來創建委托的實例。C# 2.0 引入了匿名方法的概念,作為一種編寫可在委托調用中執行的未命名內聯語句塊的方式。C# 3.0 引入了 Lambda 表達式,這種表達式與匿名方法的概念類似,但更具表現力并且更簡練。這兩個功能統稱為“匿名函數”。通常,針對 .NET Framework 版本 3.5 及更高版本的應用程序應使用 Lambda 表達式。
下面的示例演示了從 C# 1.0 到 C# 3.0 委托創建過程的發展:
class Test { delegate void TestDelegate( string s); static void M( string s) { Console.WriteLine(s); } static void Main( string [] args) { // Original delegate syntax required // initialization with a named method. TestDelegate testdelA = new TestDelegate(M); // C# 2.0: A delegate can be initialized with // inline code, called an "anonymous method." This // method takes a string as an input parameter. TestDelegate testDelB = delegate ( string s) { Console.WriteLine(s); }; // C# 3.0. A delegate can be initialized with // a lambda expression. The lambda also takes a string // as an input parameter (x). The type of x is inferred by the compiler. TestDelegate testDelC = (x) => { Console.WriteLine(x); }; // Invoke the delegates. testdelA( "Hello. My name is M and I write lines." ); testDelB( "That's nothing. I'm anonymous and " ); testDelC( "I'm a famous author." ); // Keep console window open in debug mode. Console.WriteLine( "Press any key to exit." ); Console.ReadKey(); } } /* Output: Hello. My name is M and I write lines. That's nothing. I'm anonymous and I'm a famous author. Press any key to exit. */
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
