首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 2.0 新特性深度解析(十):無參數列表匿名方法與事件處理器應用

     編輯:關於C語言

特殊語法:省略參數列表

省略 `delegate()` 的空括號,定義「與任何委派簽名相容」的匿名方法:


SomeDelegate del = delegate
{
    MessageBox.Show("Hello");
};
del("Parameter is ignored"); // 呼叫時仍需提供參數,編譯器生成隱藏參數

限制:方法體不可依賴任何參數;不可用於 `out/ref` 參數委派。

捕獲區域變數與外部成員

匿名方法可直接存取:

  • 類別成員欄位/屬性/方法。
  • 包含方法的區域變數(值語意捕獲)。

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); // 捕獲 msg、存取 m_Space
    };
    del("Juval");
}

匿名事件處理器

直接用 `+=` 註冊:


m_MyButton.Click += delegate(object sender, EventArgs args)
{
    MessageBox.Show("Clicked");
};

移除限制:`-=` 無法直接移除匿名方法(每次生成新委派實例)。解決:先存入變數再註冊/移除。


EventHandler handler = delegate { MessageBox.Show("Clicked"); };
button.Click += handler;
// 稍後
button.Click -= handler;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved