不得不明白的vb.net Delegate-只供入门

Event Delegate 在好多地方多看到了,好比在学习web user control 的时侯,还有vb.net remoting object 的时候。html

我看了很多文章后,也不是很明白。我在这里写下来,主要是为了我本身之后的回故。同时,也想让你们参考。web

要理解event delegate, 固然要先明白什么是event. 其实简单的想,就是"回叫"的机制,她解决一个依赖的问题。 好比真实世界里你的经理让你算算今年的税款。 想象一下,你的经理他每隔5分钟会打电话给你,问你作完了吗。 一个到半夜他也没歇着, 固然你也没歇着。 没有EVENT方法,就得写成LOOP语句去不停的检查一个任务是否完成。这和那个经理的作法相似。

后来,到第二年,经理又让你算算这年的税款。此次你主动说了,此次我何时作完,何时打电话给你。 经理好象还没听明白。你又说了一边"你别打给我,我会打给你的"。你算完税后, 打电话给经理的动做就是一个事件, 或者说就是“回叫”。

回到编成上,一共有三种回叫方式, 第一种“interface”, 第二种“function pointer (方程指针)”, 第三种“delegate (委托)”。 我对第三种方式有点了解,就是委托。微软webcast上有李建忠老师的观察者模式的视频教程, 他说委托其实就是观察者模式。你们能够去下载看看。看网上其它的教程, 讲委托是集合interface 和 function pointer 的优势。不过速度上好象不如function pointer, 但能够象interface 同样是强类行的。  强类行就是说, 调用委托的方法时,它的参数和返回值是必须和声明委托时的方法和返回对应起来。


编程上看,delegate是很是简单的。

看看下面这几个图片,是个完整的,简单的小demo。
总共就三个文件, 分别是: delegate.vb,  Employee.vb,  Manager.vb  这是一个winform 应用程序


delegate.vb 里的代码就一行。 就是定义delegate 方法的签名, 委托有什么参数, 有没有返回值。 这里的例子代码只要一个参数,就是经理的名字。 也不须要返回值。
因此用的是sub. 若是要有返回值, 就要用function。 下面是function 的代码, delegate function CallBackManager(byval name as String) as Boolean



Employee.vb 里代码是下面代码内容:
编程

1。 在employee内声明这个委托, 也就是说employee 有这个属性了。
2和3。   是来给employee 的这个委托属性付值。
4, 这行是employee 作完计算,而后触发打电话的事情。 invoke (触发)就是触发mdlgCallBackManager 指向的方法。 这个被指向的方法在下一段代码中。我同时又把deleagte.vb里的那行代码贴在下面了, 并用红线链接着。 这你就注意到他们的签名要同样。 也就是所谓的强类型了。

最后,就是manager form 里的代码。 下面就是。先是建立employee的实例, 而后在form load 方法里注册我要把个人哪一个方法委托给employee,换句话说就是付值给employee里的mdlgCallBackManager 属性。 我把Callme 委托给employee, 那么他签名也是要一致的。




好, 若是我运行代码,而后点button1, 我就会看到下面同样的内容



这是我所理解的delegate 内容, Event和delegate 实际上是同样。 过两天我要把上面的代码重写成event. 比较后会觉很类似。 delegate 还有异步的方法。 




Reference : http://abstractvb.com/code.asp?A=1084
  http://www.codeproject.com/csharp/eventdelegates.asp Event Delegates in Simple English By Daniel Ang Chee Meng

转载于:https://www.cnblogs.com/yangbin990/archive/2006/05/10/395945.html异步