c#之再战委托事件多线程2_委托和事件结合降低模块低耦合

我通过对一个winform窗体应用程序的不断优化,来表现如何通过“委托” 和 “事件” 来降低模块的低耦合。

但是在这之前我们要明白,什么是低耦合。

简单的说就是两个模块之间,如果一个模块中的一个类,需要实例化另一个模块中的一个类,然后调用方法,这样这两个模块就是绑在一辆战车上,如果一个模块突然消失,会报错,我们要做的就是将一个模块中要用的方法,加入到一个委托或事件中,等待其他模块来注册,其他模块是否消失,与拥有委托或事件的模块无关。听着还是很绕,上示例。

/*------------------------------------------------------------------------------------------------------分割线-----------------------------------------------------------------------------------------------------------------------*/

一..目的:拥有两个窗体(ParentForm和ChildForm),各拥有一个文本框,使用一个窗体向另一个窗体发送消息,显示在文本框中。

二.具体操作:

1. 最愚蠢的一种方式。

新建一个winfrom应用程序,加入控件并改变相关命名。

显示结果:

一个父窗体直接操作子窗体的一个数据,这在面向对象看来,是愚蠢之极。我们下面加以改良,可能我们会这样改,在子窗体中提供方法,进行修改,这样的好处还可以进行校验,看输入是否正确。

2.看似不错的更改方式

在子窗体中添加方法,用于修改子窗体的txt_receive

窗体文本框设为私有

父窗体代码中调用方法:

这种方法起码有面向对象,但是很可惜,这依然是菜鸟的书写方式,

这种方式的缺点,如果我删了childForm,主窗体就崩溃了,并且我如有很多窗体与父窗体关联,要大量的修改代码。这样的两个窗体的状体就是耦合,我们要进行解耦,即在父窗体中不能出现其他窗体的实例或代码

3.解耦,使用委托。

如果想避免2中的错误,我们应该在父窗体中不能出现其他窗体(模块)的对象。

这样如果我们再增加窗体,我们父窗体的点击事件,不需要变化。

委托并不是很安全,我们用事件,事件和委托的关系就像私有变量和属性的关系。

4.用事件

即,点击按钮后,不再直接调用委托,而是触发事件。

添加一个类

结果运行成功。

最后在强调一下,事件和委托的区别:

1.事件是委托的一个特殊实例

2.事件只能在当前类内部触发,但是可以再其他地方 +=,所以安全。

3.没了,其他的使用方法,事件和委托是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值