程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 匿名辦法根底回憶

C# 匿名辦法根底回憶

編輯:C#入門知識

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);
  }
 }

以上就是本文的全部內容,希望本文的內容對大家的學習或許任務能帶來一定的協助,同時也希望多多支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved