vb.net为什么要用 委托  理解 心得体会

vb.net为什么要用 委托  理解 心得体会

2020年4月29日

18:47

 

一个语法的出现,一般是为了解决现有方法解决不了问题.

 

 

这几天 看了 委托 的用法,很多网友 都讲了一些 自己的理解. 在这里 感谢他们.

 

 

但是 很多网友讲的例子 都是 可以直接使用 对象.方法 来实现,没有讲到 为什么要使用委托.

 

 

或者 有的 说了 为了 解耦 举的例子 却没有说服力.

 

 

我说说我的理解,同时举例子吧.不一定正确 欢迎讨论.

 

三个 类(对象 \窗体) A,B,C

 

A.方法1  完成一个工作后,需要 通知 B.方法1 来做出相应的响应.

 

常用的 实现是

 

Public Class a

 

Sub 方法1()

…..

b.方法2

 

End sub

 

 

 

End Class

 

这就出现一个问题

 

如果 A.方法1完成后又 需要通知 C 对象, 这时候 ,你就要 把 A.方法1 重新写一遍.

 

把 B.方法2换成 C.方法3

 

 这就闹心了.  不能说 有 10个对象,你就写十个 对应的方法吧.

 

这时 就该 委托语法出场了.   

Public Delegate Sub 委托()   ' 定义

Dim 委托实例1 as 委托   '声明

委托把函数当成是变量来传递给 调用它的 对象,让调用对象可以给 委托赋值.

 

Public Class A

 

Sub 方法1()

…..

委托实例1          '替换b.方法2,  这就是 所说的 调用对象不确定

 

End sub

 

End Class

 

然后 在 B 中 实现 委托实例1 的具体代码

Public Class B

 

Dim A1 as A

 

A1.委托实例1 = New A.委托(AddressOf 委托实例实现)   ' 指向 委托实例1 的 具体函数

 

Public sub 委托实例实现()

….

End sub

 

End Class

 

也就是说 把 要是先的 B.方法2,C.方法3 的指针 给A 当A 调用 委托实例1时, 会转向 B.委托实例实现(C同理)

 

简单理解 这个 委托实例1 就相当于 一个事件-- 比如 鼠标点击事件

 

按钮1 有,按钮2 有,按钮3 也有,    但是 每个出来方法不同,  如果 不用 委托, 那么 你会把所有的 代码 都 搞到同一个 鼠标点击事件里 判断 是 哪个 按钮点击了然后做出处理,这样 导致 代码 堆叠 很难阅读 和修改.

 

另一个好处 是 委托实例的实现 是在 B 中 编写的, 如果B是窗体,那么 B 就可以根据 A完成情况,做出相应的响应,而不是B去查询,或者A直接调用B(又回到了前面说的 有多少对象就要写多少重复的代码的问题).

 

再举一个例子

宾馆的叫醒服务

类或窗体 就 好比 旅客团体,其中的方法 就好比 单个旅客. 宾馆的叫醒打包服务就好比 委托

旅客有一个 打包的事情要处理,他可以在自己房间处理. 也可以被叫到大堂去打包.

 

委托声明 就想到要 告诉 旅客,我有一个委托叫醒打包的服务,你可以选择.

 

委托 赋值 哪一部,就相当于 告诉宾馆, 我的房间是 1024,请叫我打包.

 

1\旅客团体 委托 宾馆叫醒 单个旅客a,当设定时间到了以后, 旅客在自己的房间 被唤醒.

2\不委托, 把旅客拖到大堂打包.

 

比较一下,1委托后,旅客自己打包即可,   2不委托 要挨个宾馆负责打包.

 

总结:当你的状态变化时, 需要 调用对象(比如窗体) 根据实际情况(更新界面)处理时 就是用 委托.

 

尤其是 跨窗口 更新 界面时.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值