C# 匿名辦法根底回憶。本站提示廣大學習愛好者:(C# 匿名辦法根底回憶)文章只能為提供參考,不一定能成為您想要的結果。以下是C# 匿名辦法根底回憶正文
目錄
簡介
在 C# 2.0 之前的版本中,我們創立委托的獨一方式 -- 命名辦法。
而 C# 2.0 -- 引進了匿名辦法,在 ≥ C# 3.0 的版本中,我們會用 Lambda 表達式停止取代匿名辦法,並且用 Lambda 表達式作為編寫內聯代碼的首選方式,由於它更簡約。
匿名辦法是,望文生義,匿名辦法就是沒有稱號的辦法。匿名辦法最分明的益處就是:可以降低額定另寫一個辦法的任務量;另外一個益處就是可以直接訪問調用者的變量,從而降低傳參的復雜度。
匿名辦法,它不是一個事前定義的辦法,而是運用一個委托的代碼塊,在運用時,和普通辦法並沒有什麼區別,但是匿名辦法可以在一定水平上增加零碎開支。
匿名辦法,關鍵字:delegate。
匿名辦法,運用場景:通常在,①需求一個暫時的辦法,並且該辦法運用的次數極少;②該辦法的代碼很短,不長。
【留意】有一種狀況,匿名辦法它提供了 Lambda 表達式所沒有具有的功用。 那就是,你可以運用匿名辦法來疏忽參數列表。 這意味著匿名辦法可以轉換為具有各種簽名的委托,而這些,關於 Lambda 表達式來說,簡直是完全不能夠的。
想要將代碼塊作為委托參數停止傳遞,運用匿名辦法是目前獨一的方式。
示例一:
// 創立一個點擊事情 button1.Click += delegate(Object o, EventArgs e) { MessageBox.Show("Click!"); };
示例二:
// 創立一個委托. delegate void MyDel(int x); // 運用匿名辦法並將委托實例化 MyDel del = delegate(int k) { /* ... */ };
運用匿名辦法,由於無需獨自額定創立辦法,從而增加了上述兩個示例實例化委托所需求的編碼開支。
例如,假如創立辦法所需的零碎開支並不是必要的,則指定代碼塊(而不是委托)就會十分有用。
我在這裡經過一個示例演示,如何用一個匿名辦法的方式創立並啟動一個新的線程:
//新建線程啟動的示例 void Start() { //聲明 Thread thread = new Thread (delegate() { Write("Hello, "); WriteLine("Fanguzai!"); }); //啟動 thread.Start(); }
匿名辦法的參數運用范圍
匿名辦法的參數運用范圍:匿名辦法塊。
假如目的在塊內部,你在匿名塊外部運用 -- 跳轉的關鍵字(相似 goto/break/continue),就是錯誤的;假如目的在塊外部,你在匿名塊內部運用 -- 跳轉的關鍵字(相似 goto/break/continue),也是錯誤的。
假如部分變量和參數的范圍曾經包括匿名辦法聲明,則該部分變量和參數將被稱為該匿名辦法的“內部”(外界)變量。你看,這個代碼段中的 num 就是一個內部(外界)變量:
int num = 250; MyDel del = delegate() { WriteLine("#:{0}", --num); };
這個內部變量的所援用的 num,將會被以為是在創立委托時停止捕捉的,它與我們常用的本地變量不同,這個內部變量的生活期 -- 援用該匿名辦法的委托對象被 .NET 的 CLR 的渣滓回收機制停止回收。
【留意】匿名辦法無法訪問內部(外界)范圍內,帶 ref 與 out 關鍵字的參數。
【留意】在匿名塊中不能訪問 unsafe 的代碼。
【留意】在 is 運算符的右邊,是用不了匿名的辦法的。
委托示例
上面的示例,將會同時運用匿名辦法和命名辦法去調用委托時:
// 聲明委托 delegate void MyDel(string s); class MyClass { static void Main() { // 運用匿名辦法實例化委托 MyDel p = delegate (string msg) { Console.WriteLine(msg); }; // 直接調用 p("運用匿名辦法調用委托。"); // 下面的方式再簡寫 p = Console.WriteLine; Console.WriteLine("下面簡寫的方式"); // 運用"Do"的靜態辦法的委托實例化。 p = new MyDel(MyClass.Do); // 運用舊的作風調用委托 p("運用命名辦法調用委托。"); Console.Read(); } // 後續用於委托調用 static void Do(string msg) { Console.WriteLine(msg); } }
以上就是本文的全部內容,希望本文的內容對大家的學習或許任務能帶來一定的協助,同時也希望多多支持!