C# 101 - Cancel Event的設計
最近上課時,學員問到C#當中Event的設計,主要是希望能夠設計出類似WinForm視窗關閉時,那個帶有Cancel屬性的e參數,為此,該學員傷腦筋了很久。
為了避免學員內心受創,因此我緩緩地先述說了一段事件設計的歷史故事,成功轉移焦點後,再委婉告訴他其實不用設計,因為.NET從2.0開始就有了,直接繼承CancelEventArgs 類別即可。
程式碼如下:
而使用該參數時,只需要撰寫類似底下這樣的事件程式碼:
這樣設計出來的事件,在使用參數時就會具有e.Cancel屬性,而在我們觸發該事件的程式碼中,就可以透過底下這樣的Code, 來依照Cancel的值判斷是否要繼續後面的程式碼(這就是我們在WinForm的Closing事件中將屬性e.Cancel設為true之後,就不會關閉視窗的原因)...
其實整個很簡單,但令人訝異的是,許多.NET Developer由於並不常寫Class,導致對.NET內建的許多類別異常的不熟悉。
已經很久沒有機會和學員討論到基礎的東西了,頗令我感慨的是,學員對MVC有興趣,對MVVM有好奇,但由於網路資訊的普及,已經不多Developer,還願意花時間把Programing 101的書籍翻開來好好閱讀了...網路上資訊確實很多,但由於都較為片段,不容易有系統的學習,容易使得開發人員的觀念2266。
可是,我很想跟學員說,其實你知道嗎? 扎實的基礎,才是能夠在職場中站穩腳步的關鍵要素。
分享
為了避免學員內心受創,因此我緩緩地先述說了一段事件設計的歷史故事,成功轉移焦點後,再委婉告訴他其實不用設計,因為.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。
可是,我很想跟學員說,其實你知道嗎? 扎實的基礎,才是能夠在職場中站穩腳步的關鍵要素。
分享
留言