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

C# 2.0 匿名方法懷疑論分析(二):內聯委派、可維護性質疑與總結

     編輯:關於C語言

匿名方法本質:內聯委派

傳統委派需分離方法定義與實例化;匿名方法將方法體內嵌於委派初始化處:


// 傳統
button1.Click += new EventHandler(OnClick);
void OnClick(object s, EventArgs e) { Debug.WriteLine("clicked"); }

// 匿名方法
button1.Click += delegate { Debug.WriteLine("clicked"); };
// 帶參數
button1.Click += delegate(object s, EventArgs e) { Debug.WriteLine("obj: " + s); };
  • 參數列表可選,若提供必須符合委派簽名。
  • 可用於任何需委派處:`InvokeDelegate(delegate() {...})`。
  • 抽象 `Delegate` 參數需強制轉型:`(SomeDelegate)delegate() {...}`。
  • 支援 `ref/out` 參數,不支援 `unsafe`、`goto/break/continue` 跳出區塊。

市場調查與實務觀察

  • **優點**:減少委派實例化與分離方法的樣板碼,局部邏輯內聚。
  • **缺點**:
    • 巢狀委派傳遞時括號/分號/大括號層層疊加,極難閱讀:

BindClick(delegate { Debug.WriteLine("click"); });
void BindClick(EventHandler h) { button1.Click += h; }
  • 線程場景雖省 `ThreadStart` 建構,但線程正確使用本身極難,匿名方法未本質降低複雜度。
  • 良好命名的具名方法同樣可達到可維護性,且除錯堆疊可讀性更好。

總結與預測

  • 匿名方法證明了「無名方法可存在並用於委派場合」。
  • 實用性與普及度有待時間驗證,**預測不會超過運算子多載**,使用率較低。
  • 但已成 .NET 一部分,**閱讀代碼時必須能識別**。
  • 語言層面偏好具名方法;工程層面或許只是微軟某發明者「過度聰明」的產物。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved