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

C# 2.0 引入的匿名方法

編輯:.NET實例教程

摘至msdn

在 2.0 之前的 C# 版本中,聲明委托的唯一方法是使用命名方法。C# 2.0 引入了匿名方法。

要將代碼塊傳遞為委托參數,創建匿名方法則是唯一的方法。例如:

 

// Create a handler for a click event
button1.Click += delegate(System.Object o, System.EventArgs e)
                   ...{ System.Windows.Forms.MessageBox.Show("Click!"); };



// Create a delegate instance
delegate void Del(int x);

// Instantiate the delegate using an anonymous method
Del d = delegate(int k) ...{ /**//* ... */ };

如果使用匿名方法,則不必創建單獨的方法,因此減少了實例化委托所需的編碼系統開銷。

例如,如果創建方法所需的系統開銷是不必要的,在委托的位置指定代碼塊就非常有用。啟動新線程即是一個很好的示例。無需為委托創建更多方法,線程類即可創建一個線程並且包含該線程執行的代碼。

 



void StartThread()
...{
    System.Threading.Thread t1 = new System.Threading.Thread
      (delegate()
            ...{
                System.Console.Write("Hello, ");
                System.Console.WriteLine("World!");

     });
    t1.Start();
}

匿名方法的參數的范圍是 anonymous-method-block。

在目標在塊外部的匿名方法塊內使用跳轉語句(如 goto、break 或 continue)是錯誤的。在目標在塊內部的匿名方法塊外部使用跳轉語句(如 goto、break 或 continue)也是錯誤的。

如果局部變量和參數的范圍包含匿名方法聲明,則該局部變量和參數稱為該匿名方法的外部變量或捕獲變量。例如,下面代碼段中的 n 即是一個外部變量:



int n = 0;
Del d = delegate() ...{ System.Console.WriteLine("Copy #:{0}", ++n); };

與局部變量不同,外部變量的生命周期一直持續到引用該匿名方法的委托符合垃圾回收的條件為止。對 n 的引用是在創建該委托時捕獲的。

匿名方法不能訪問外部范圍的 ref 或 out 參數。

在 anonymous-method-block 中不能訪問任何不安全代碼。



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