c#之再戰委託事件多線程2_委託和事件結合降低模塊低耦合

我通過對一個winform窗體應用程序的不斷優化,來表現如何通過“委託” 和 “事件” 來降低模塊的低耦合。

但是在這之前我們要明白,什麼是低耦合。

簡單的說就是兩個模塊之間,如果一個模塊中的一個類,需要實例化另一個模塊中的一個類,然後調用方法,這樣這兩個模塊就是綁在一輛戰車上,如果一個模塊突然消失,會報錯,我們要做的就是將一個模塊中要用的方法,加入到一個委託或事件中,等待其他模塊來註冊,其他模塊是否消失,與擁有委託或事件的模塊無關。聽着還是很繞,上示例。

/*------------------------------------------------------------------------------------------------------分割線-----------------------------------------------------------------------------------------------------------------------*/

一..目的:擁有兩個窗體(ParentForm和ChildForm),各擁有一個文本框,使用一個窗體向另一個窗體發送消息,顯示在文本框中。

二.具體操作:

1. 最愚蠢的一種方式。

新建一個winfrom應用程序,加入控件並改變相關命名。

顯示結果:

一個父窗體直接操作子窗體的一個數據,這在面向對象看來,是愚蠢之極。我們下面加以改良,可能我們會這樣改,在子窗體中提供方法,進行修改,這樣的好處還可以進行校驗,看輸入是否正確。

2.看似不錯的更改方式

在子窗體中添加方法,用於修改子窗體的txt_receive

窗體文本框設爲私有

父窗體代碼中調用方法:

這種方法起碼有面向對象,但是很可惜,這依然是菜鳥的書寫方式,

這種方式的缺點,如果我刪了childForm,主窗體就崩潰了,並且我如有很多窗體與父窗體關聯,要大量的修改代碼。這樣的兩個窗體的狀體就是耦合,我們要進行解耦,即在父窗體中不能出現其他窗體的實例或代碼

3.解耦,使用委託。

如果想避免2中的錯誤,我們應該在父窗體中不能出現其他窗體(模塊)的對象。

這樣如果我們再增加窗體,我們父窗體的點擊事件,不需要變化。

委託並不是很安全,我們用事件,事件和委託的關係就像私有變量和屬性的關係。

4.用事件

即,點擊按鈕後,不再直接調用委託,而是觸發事件。

添加一個類

結果運行成功。

最後在強調一下,事件和委託的區別:

1.事件是委託的一個特殊實例

2.事件只能在當前類內部觸發,但是可以再其他地方 +=,所以安全。

3.沒了,其他的使用方法,事件和委託是一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章