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

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

編輯:關於C語言

然而,如果您將 delegate 關鍵字 與後面的空括號一起忽略,則您將定義一種特殊的匿名方法,它可以指派給具有 任何簽名的任何委托:

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

明顯地,如果匿名方法並不依賴於任何參數,而且您想要使用這種與 委托簽名無關的方法代碼,則您只能使用這樣的語法。注意,當調用委托時,您 仍然需要提供參數,因為編譯器為從委托簽名中推理的匿名方法生成無名參數, 就好像您曾經編寫了下面的代碼(在 C# 偽碼中)一樣:

SomeDelegate del = delegate(string)
{
 MessageBox.Show("Hello");
};

此外,不帶參數列表的匿名方法不能與指出 參數的委托一起使用。

匿名方法可以使用任何類成員變量,並且它還可以 使用定義在其包含方法范圍之內的任何局部變量,就好像它是自己的局部變量一 樣。圖 7 對此進行了展示。一旦知道如何為一個匿名方法傳遞參數,也就可以很 容易地定義匿名事件處理,如圖 8 所示。

因為 += 運算符僅僅將一個委 托的內部調用列表與另一個委托的內部調用列表連接起來,所以可以使用 += 來 添加一個匿名方法。注意,在匿名事件處理的情況下,不能使用 -= 運算符來刪 除事件處理方法,除非將匿名方法作為處理程序加入,要這樣做,可以首先將匿 名方法存儲為一個委托,然後通過事件注冊該委托。在這種情況下,可以將 -= 運算符與相同的委托一起使用,來取消將匿名方法作為處理程序進行注冊。

Figure 7Local Variable in Anonymous Method Code

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

圖 7

Figure 8Anonymous Method as Event Handler

public class MyForm : Form
{
  Button m_MyButton;
  public MyForm()
  {
   InitializeComponent();
    m_MyButton.Click += delegate(object sender,EventArgs args)
              {
               MessageBox.Show("Clicked");
              };
  }
  void InitializeComponent()
  {...}
}

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