帶你重溫C#委託,匿名方法,Lambda,泛型委託,表達式樹代碼範例:
這些對老一代的程式設計師都是老生常談的東西,沒什麼新意,對新生代的程式設計師卻充滿著魅力。曾經新生代,好多都經過漫長的學習,理解,實踐才能掌握委託,表達式樹這些應用。今天我試著用簡單的方法敘述一下,讓大家在五分鐘內看完這篇部落格。
# 第一分鐘:委託
# 有些教材,博客說到委託都會提到事件,雖然事件是委託的一個實例,但是為了理解起來更簡單,今天只談委託不談事件。先上一段程式碼:
下邊的程式碼,完成了一個委託應用的示範。一個委託分三個步驟:
public partial class WebForm3 : System.Web.UI.Page { //step01:首先用delegate定义一个委托 。 public delegate int CalculatorAdd(int x, int y); protected void Page_Load(object sender, EventArgs e) { //step03:用这个方法来实例化这个委托。 CalculatorAdd cAdd = new CalculatorAdd(Add); //int result = cAdd(5, 6); int result = cAdd.Invoke(5,6); } // step02:声明一个方法来对应委托。 public int Add(int x, int y) { return x + y; } }
step01:首先用delegate定義一個委託 。
step02:宣告一個方法來對應委託。
step03:用這個方法來實例化這個委託。
至此,一個委託的應該就完成了,就可以調用委託了。
第二分鐘:匿名方法
在上一分鐘已經知道了,完成一個委託應用分三步走,缺一步都不行,如果要跨大步,當心步子大了扯著蛋。但是微軟不怕扯著蛋,非要把三步驟做成兩步來走啊!所以微軟就用匿名方法來簡化上邊的三個步驟。匿名方法這個玩意兒怎麼說呢,在C#中完全是可有可無的東西,只是為C#錦上添花,有人別出心裁給它取個名字叫語法糖。
public partial class WebForm3 : System.Web.UI.Page { //step01:首先用delegate定义一个委托 public delegate int CalculatorAdd(int x, int y); protected void Page_Load(object sender, EventArgs e) { //step02:用这样的写法 delegate(int x, int y) { return x + y; },把一个方法赋值给委托 CalculatorAdd cAdd = delegate(int x, int y) { return x + y; }; int result = cAdd.Invoke(5, 6); } }
step01:首先用delegate定義一個委託 。
step02:用這樣的寫法 delegate(int x, int y) { return x + y; },把一個方法賦值給委託,其實這種寫法就是匿名方法。
這時會驚奇的發現,這不是三步當著兩步走了哇?
第三分鐘:Lambda表達式
原本很簡單的程序,加上幾個delegate關鍵字,這代碼一下就變得深奧了,深奧的東西懂的人就變少了,所以這個還可以作為加薪的籌碼。但微軟對C#的設計理念是簡單易用。微軟就想辦法的來簡化delegate(int x, int y) { return x + y; }這個匿名方法,Lambda就出現了。下邊我來看幾個lambda表達式的寫法:
public partial class WebForm3 : System.Web.UI.Page { public delegate int CalculatorAdd(int x, int y); protected void Page_Load(object sender, EventArgs e) { //方法一: CalculatorAdd cAdd1 = (int x, int y) => { return x + y; }; int result1 = cAdd1(5, 6); //方法二: CalculatorAdd cAdd2 = (x, y) => { return x + y; }; int result2 = cAdd2(5, 6); //方法三: CalculatorAdd cAdd3 = (x, y) => x + y; int result3 = cAdd2(5, 6); } }
方法一:簡單的把delegate去掉,在()與{}之間加上 "=>"。
方法二:在方法一的基礎上把參數型別都乾掉了。
方法三:要乾就乾徹底些,把{},以及return關鍵字都去掉了。
這幾種方法隨便怎麼寫都行,不過就是害苦了初學者,一會兒看到這種寫法,一會兒看到那種寫法,把人搞的神魂顛倒人,如果沒人指點,確實會迷糊,難就難在這兒。
第四分鐘:泛型委託
隨著.net版本的不升級,新版本總要區別於舊版吧,不然微軟的工程師怎麼向他們的老大交差呀?所以微軟又來玩新花樣了。
public partial class WebForm3 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //方法一: Func<int,int,int> cAdd1 = (int x, int y) => { return x + y; }; int result1 = cAdd1(5, 6); //方法二: Func<int, int, int> cAdd2 = (x, y) => { return x + y; }; int result2 = cAdd2(5, 6); //方法三: Func<int, int, int> cAdd3 = (x, y) => x + y; int result3 = cAdd2(5, 6); } }
不管是匿名方法還是Lambda表達式,完成一個委託的應用,都逃不過兩個步驟,一步是定義一個委託,另一步是用一個方法來實例化一個委託。 微軟乾脆把這兩步都合成一步來走了。用Func來簡化一個委託的定義。
至此一個委託的應用就可用 Func
第五分鐘:表達式樹
表達式樹其實與委託已經沒什麼關係了,非要扯上關係,那就這麼說吧,表達式樹是存放委託的容器。如果非要說的更專業一些,表達式樹是訪問Lambda表達式的一種資料結構。要用Lambda表達式的時候,直接從表達式中取得出來,Compile()就可以直接用了。如下程式碼:
public partial class WebForm3 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Expression<Func<int, int, int>> exp = (x, y) => x + y; Func<int, int, int> fun = exp.Compile(); int result = fun(2, 3); } }
我點到的很膚淺,但至少讓大家再溫習了一篇委託,匿名方法,Lambda,泛型委託,表達式樹。
以上是帶你重溫C#委託,匿名方法,Lambda,泛型委託,表達式樹代碼範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

C#.NET中的設計模式包括Singleton模式和依賴注入。 1.Singleton模式確保類只有一個實例,適用於需要全局訪問點的場景,但需注意線程安全和濫用問題。 2.依賴注入通過注入依賴提高代碼靈活性和可測試性,常用於構造函數注入,但需避免過度使用導致複雜度增加。

C#.NET在現代世界中廣泛應用於遊戲開發、金融服務、物聯網和雲計算等領域。 1)在遊戲開發中,通過Unity引擎使用C#進行編程。 2)金融服務領域,C#.NET用於開發高性能的交易系統和數據分析工具。 3)物聯網和雲計算方面,C#.NET通過Azure服務提供支持,開發設備控制邏輯和數據處理。

C#.NET開發者社區提供了豐富的資源和支持,包括:1.微軟的官方文檔,2.社區論壇如StackOverflow和Reddit,3.GitHub上的開源項目,這些資源幫助開發者從基礎學習到高級應用,提升編程技能。

C#.NET的優勢包括:1)語言特性,如異步編程簡化了開發;2)性能與可靠性,通過JIT編譯和垃圾回收機制提升效率;3)跨平台支持,.NETCore擴展了應用場景;4)實際應用廣泛,從Web到桌面和遊戲開發都有出色表現。

C#並不總是與.NET捆綁在一起。 1)C#可以在Mono運行時環境中運行,適用於Linux和macOS。 2)在Unity遊戲引擎中,C#用於腳本編寫,不依賴.NET框架。 3)C#還可用於嵌入式系統開發,如.NETMicroFramework。

C#在.NET生態系統中扮演核心角色,是開發者的首選語言。 1)C#提供高效、易用的編程方式,結合C、C 和Java的優點。 2)通過.NET運行時(CLR)執行,確保跨平台高效運行。 3)C#支持從基本到高級的用法,如LINQ和異步編程。 4)優化和最佳實踐包括使用StringBuilder和異步編程,提高性能和可維護性。

C#是微軟在2000年發布的編程語言,旨在結合C 的強大功能和Java的簡潔性。 1.C#是一種類型安全、面向對象的編程語言,支持封裝、繼承和多態。 2.C#的編譯過程將代碼轉化為中間語言(IL),然後在.NET運行時環境(CLR)中即時編譯成機器碼執行。 3.C#的基本用法包括變量聲明、控制流和函數定義,而高級用法涵蓋異步編程、LINQ和委託等。 4.常見錯誤包括類型不匹配和空引用異常,可通過調試器、異常處理和日誌記錄來調試。 5.性能優化建議包括使用LINQ、異步編程和提高代碼可讀性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載
最受歡迎的的開源編輯器