程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 2.0:使用匿名方法、迭代程序和局部類來創建優雅的代碼(9)

C# 2.0:使用匿名方法、迭代程序和局部類來創建優雅的代碼(9)

編輯:關於C語言

匿名方法被定義為內嵌 (in-line) 方法,而不是作為任何類的成員方 法。此外,無法將方法屬性應用到一個匿名方法,並且匿名方法也不能定義一般 類型或添加一般約束。

您應該注意關於匿名方法的兩件值得關注的事情: 委托保留關鍵字的重載使用和委托指派。稍後,您將看到編譯器如何實現一個匿 名方法,而通過查看代碼,您就會相當清楚地了解編譯器必須推理所使用的委托 的類型,實例化推理類型的新委托對象,將新的委托包裝到匿名方法中,並將其 指派給匿名方法定義中使用的委托(前面的示例中的 del)。

匿名方法可 以用在任何需要使用委托類型的地方。您可以將匿名方法傳遞給任何方法,只要 該方法接受適當的委托類型作為參數即可:

class SomeClass
{
  delegate void SomeDelegate();
  public void SomeMethod()
  {
   InvokeDelegate(delegate() {MessageBox.Show("Hello");});
  }
  void InvokeDelegate(SomeDelegate del)
  {
   del();
  }
}

如果需要將一個匿名方法傳遞給一個接受抽象 Delegate 參數 的方法,例如:

void InvokeDelegate(Delegate del);

則首先需要將匿名方法強制轉換為特定的委托類型。

下面是一個將匿名方 法作為參數傳遞的具體而實用的示例,它在沒有顯式定義 ThreadStart 委托或線 程方法的情況下啟動一個新的線程:

public class MyClass
{
  public void LauchThread()
  {
   Thread workerThread = new Thread(delegate()
               {
                MessageBox.Show ("Hello");
              });
    workerThread.Start();
  }
}

在前面的示例中,匿名方 法被當作線程方法來使用,這會導致消息框從新線程中顯示出來。

將參數 傳遞到匿名方法

當定義帶有參數的匿名方法時,應該在 delegate 關鍵字後面 定義參數類型和名稱,就好像它是一個常規方法一樣。方法簽名必須與它指派的 委托的定義相匹配。當調用委托時,可以傳遞參數的值,與正常的委托調用完全 一樣:

class SomeClass
{
  delegate void SomeDelegate(string str);
  public void InvokeMethod()
  {
   SomeDelegate del = delegate(string str)
              {
               MessageBox.Show (str);
             };
   del ("Hello");
  }
}

如果匿名方法沒有參數,則 可以在 delegate 關鍵字後面使用一對空括號:

class SomeClass
{
  delegate void SomeDelegate();
  public void InvokeMethod()
  {
   SomeDelegate del = delegate()
             {
               MessageBox.Show("Hello");
             };
   del();
  }
}

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