2011年4月28日 星期四

C# 101 - Cancel Event的設計

最近上課時,學員問到C#當中Event的設計,主要是希望能夠設計出類似WinForm視窗關閉時,那個帶有Cancel屬性的e參數,為此,該學員傷腦筋了很久。

為了避免學員內心受創,因此我緩緩地先述說了一段事件設計的歷史故事,成功轉移焦點後,再委婉告訴他其實不用設計,因為.NET從2.0開始就有了,直接繼承CancelEventArgs 類別即可。

程式碼如下:
public class MyEventArgs : System.ComponentModel.CancelEventArgs
{
//你可以加上其他你需要的屬性
public string AnotherProperty { get; set; }
}

而使用該參數時,只需要撰寫類似底下這樣的事件程式碼:

public delegate void MyActionEventHandler(object sender, MyEventArgs e);
public event MyActionEventHandler MyAction; 

這樣設計出來的事件,在使用參數時就會具有e.Cancel屬性,而在我們觸發該事件的程式碼中,就可以透過底下這樣的Code, 來依照Cancel的值判斷是否要繼續後面的程式碼(這就是我們在WinForm的Closing事件中將屬性e.Cancel設為true之後,就不會關閉視窗的原因)...

if (MyAction != null)
 {
     MyEventArgs arg = new MyEventArgs();
     MyAction.Invoke(this, arg);
     if (arg.Cancel) { return; }
     ...其他程式碼...
  }

其實整個很簡單,但令人訝異的是,許多.NET Developer由於並不常寫Class,導致對.NET內建的許多類別異常的不熟悉。

已經很久沒有機會和學員討論到基礎的東西了,頗令我感慨的是,學員對MVC有興趣,對MVVM有好奇,但由於網路資訊的普及,已經不多Developer,還願意花時間把Programing 101的書籍翻開來好好閱讀了...網路上資訊確實很多,但由於都較為片段,不容易有系統的學習,容易使得開發人員的觀念2266。

可是,我很想跟學員說,其實你知道嗎? 扎實的基礎,才是能夠在職場中站穩腳步的關鍵要素。

分享

1 則留言:

匿名 提到...

請問老師這類的 C# Programing 101 該去哪邊學習呢?