可笑的是真正弄明白委托的意义和作用的人却一盘沙茫。
一大堆错误答案来忽悠的人太多了。
这时候本大魔王愿意伸手慈悲,阿门~~
本大魔王赐给答案之前要求一大堆自称大神的人都来挑战知识吧!
我相信这个考试有一个人容易过关,所以,决定中出答案赐赏100分大魔王金币!
没一个人中出答案就扔垃圾桶了.
时间是7天内完成。
27 个解决方案
#1
从语言上来判断,lz幼年和青年时期遭遇过严重得创伤啊。
#2
不就是一个函数指针吗? 至于让你这样子么 ?
#3
这是重度中二病症状,之前就有恶化的趋势,虽然很多热心人极力挽救,可是没想到还是发展到晚期了。果然中二是无药可救的么 ╮(╯▽╰)╭
#4
面向对象类型安全的函数指针
#5
#6
我不发表言论,坐等老师开讲
顺便问一下,去年发的几个贴子你到底想什么时候结啊?
顺便问一下,去年发的几个贴子你到底想什么时候结啊?
#7
楼主,说下你的理解
#8
楼上说的对!!!
#9
您的答案是错误了。vb.net中不会产生任何使用价值。
如果,把委托定义为'类型安全的函数指针',这将抹杀vb.net中委托本应有的重要地位和特殊能力。
连委托的作用和意义是什么,什么侍候使用也搞不清楚。
您要谈论函数指针这个功能问题,应该其他编程语言环境中讨论。
#10
哈哈! 恐怕能过关本大魔王考试的真的不存在。
这么长时间等待了没有胆敢露面应试,好像害怕自己的答案错误。
所以,本大魔王要抽出宝贵时间这几天内准备教程!
这么长时间等待了没有胆敢露面应试,好像害怕自己的答案错误。
所以,本大魔王要抽出宝贵时间这几天内准备教程!
#11
委托就是给把菜刀你帮我去抢银行,我的回答太完美了。
#12
委托就是让你可以传递方法,至于么,由此可以减少大量的接口定义
#13
以这个为例子的话,应该是说设计了一个抢劫银行的案例,但具体以什么作为武器,然后如何抢劫还没定好,让下面各自去想办法,你们拿着刀去银行,很光棍的说“抢劫”也好;还是拿把枪,排着队,轮到时把枪指着业务人员说“抢劫”也好,反正最终实现者一定要把钱给抢来,如果抢不来,那就异常
#14
委托是叫你帮我抢银行,给把菜刀你是传递了菜刀的参数抢银行,介于楼主的问题只是委托,所以具体实践的方法由受委托人自己写
#15
委托就是给把菜刀你帮我去抢银行,我的回答太完美了。
您的答案是错了。因为,vb,net中委托人没有具体要求和指令。
却被委托人才有具体指令和行为。
#16
委托就是让你可以传递方法,至于么,由此可以减少大量的接口定义
您的答案也错了。 委托的目的不是为了大量减少借口而存在。
#17
4楼总结的比较到位,就这么点事,何必哗众取宠
#18
没一个人中出答案就扔垃圾桶了.
时间是7天内完成。
我虽然不会日语,但是会搜索一下“中出”这个词儿的含义的!
这种疯话你让别人怎么回答啊?别人回答就是“中出”啊?!哦,FCK。
#19
【词目】委托
【释义】把事情托付给别人或别的机构(办理)
【例句】这些产品是另一家公司委托我们生产出来的。
【同义词】付托、交托
能不能来点干的?每次都标着原创教程,然后出了个题,然后糊里糊涂就放置play了
【释义】把事情托付给别人或别的机构(办理)
【例句】这些产品是另一家公司委托我们生产出来的。
【同义词】付托、交托
能不能来点干的?每次都标着原创教程,然后出了个题,然后糊里糊涂就放置play了
#20
我能呵呵吗?
#21
重度中二少年
#22
看了看楼主之前发的帖子,我决定关注你,当你的粉丝。
写代码的人之中能像楼主这般有娱乐精神的人不多了
写代码的人之中能像楼主这般有娱乐精神的人不多了
#23
看了看楼主之前发的帖子,我决定关注你,当你的粉丝。
写代码的人之中能像楼主这般有娱乐精神的人不多了
看了此人以前的帖子,只能呵呵了,就这水平,呵呵
#24
Public Class Class1
'什么是叫委托,委托的意义和作用。
'委托概念的产生原因是因为分别出现了代码的设计者和使用者的关系。
'因为这种设计者与使用者的关系的原因,就出现了代码的设计者一系列预定义问题。
'代码的设计者设计阶段有一个面临实现关键核心功能具体化问题,主要是代码的设计者并不知道代码的使用者具体要求什么样的功能。
'因为,代码的设计者来说代码的使用者需要的功能可能是几百种甚至几千种都可能!!!
'这就是代码的设计者设计阶段面临的最头疼的问题。
'微软长期挖苦中突然闪亮了一对双眼金睛,从那双眼金睛中使劲儿拉出来了委托字样和模式。
'大家请继续保持精神!因为,本大魔王正在破旧的餐桌上演讲呢
'委托的第一的作用;
'举一个Task任务类型的对象来说明问题吧!
'Task对象是由微软设计出来的,美利坚合众国微软是代码的设计者。
'Task对象创建过程中分为可预知的部分和不可预知的部分组成。
'代码的设计者在设计阶段可预知的部分是由代码的设计者自己预定义完成相关功能,例如;Start,Wait,Result等等众多可预知功能。
'但是,代码的设计者不可预知的部分是什么呢???
'因为,Task对象是属于线程操作类型的。但是代码的设计者并不知道代码的使用者在此Task上具体需要实现什么样的功能,
'这就是代码的设计者设计阶段面临的得了感冒一般头疼的问题。
'上面已经提到,美国微软已经发明了<委托>。现在已经是派上用场的时候了!!!
'代码的设计者在设计阶段不可预知的部分直接委托给代码的使用者,使代码的使用者自己定义实现具体功能。
'同时,代码的设计者并不需要关心代码的使用者具体需要什么样的功能了。
'如果,没有委托那怎样了? 其结果是每个用户的使用者可能需要的功能上达几百种甚至几千种更是天文数字啊!!!
'这样的状态下代码的设计者永远无法做到满足,代码的使用者也无法使用如此繁多的功能列表上查找使用!
'有了委托就解决了如上的所有难题。
'委托的第二作用;
'本大魔王举一个最简单的小学一年级加减乘除+-*/来讲课。
Private Function MyFunc1(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 + Math1
End Function
Private Function MyFunc2(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 - Math1
End Function
Private Function MyFunc3(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 * Math1
End Function
Private Function MyFunc4(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 / Math1
End Function
'请看上面定义的四个函数,实现加减乘除功能使用了四个函数。
'如果,在公共函数中代码的设计者如此这样模式设计,vb.net的函数列表中能看到无法承受的庞大的函数纵队!!!
'估计本大魔王也用不了!
'这时候委托该派上用场了!!!
'请看下面代码的设计者设计的一个函数。
'这个函数使用了委托,代码的使用者凭借这样设计的唯一一个函数,都能自定义实现加减乘除4个功能!!!
Private Function MyFunc(ByVal Math1 As Integer, ByVal Func1 As Func(Of Integer, Integer, Integer)) As Integer
Const Val1 As Integer = 20
Return Func1.Invoke(Val1, Math1)
End Function
'代码的使用者使用过程中自定义实现功能。
'具体如下;
Sub MySub()
Dim Result1 As Integer
'代码的使用者自定义实现加法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a + b)
'代码的使用者自定义实现减法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a - b)
'代码的使用者自定义实现乘法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a * b)
'代码的使用者自定义实现除法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a / b)
End Sub
'委托的第三作用;
'这个大家自己寻找答案吧! 免费已经足够了!!!
'本大魔王继续演讲委托的类型问题。
'委托本身具有委托类型,代码的设计者通过声明委托,然后使用者实例化实现自定义功能。
'委托类型是lambda表达式类型的。所以,只能用Sub,Function这2种类型的。
'使用环境不同出现了2种类型的实例化委托方式,就是lambda表达式和AddressOf这2种类型来实例化委托。
'其中AddressOf关键字只用来引用带名称的Sub或Function时使用。lambda表达式则直接在委托上实例化。
'所以,本大魔王的结论是委托实质是Sub或Function的抽象。代码的设计者不可预知的部分委托给使用者,而且代码的设计者只是做了Sub或Function的抽象。
'代码的使用者使用阶段具体化Sub或Function,代码的使用者由此梦想成真自定义实现具体功能。
'我的小魔王出来鼓掌一下, 激发本大魔王威力无比的智慧!
'最后强调本大魔王是一个大家认识的高丽棒子!
'网上忽悠概念的人实在是太多。
'有人说委托是安全类型的指针函数,又有人说委托是委托给别人结果带回来等等让人苦笑不得的局面层出不穷。
'
End Class
'什么是叫委托,委托的意义和作用。
'委托概念的产生原因是因为分别出现了代码的设计者和使用者的关系。
'因为这种设计者与使用者的关系的原因,就出现了代码的设计者一系列预定义问题。
'代码的设计者设计阶段有一个面临实现关键核心功能具体化问题,主要是代码的设计者并不知道代码的使用者具体要求什么样的功能。
'因为,代码的设计者来说代码的使用者需要的功能可能是几百种甚至几千种都可能!!!
'这就是代码的设计者设计阶段面临的最头疼的问题。
'微软长期挖苦中突然闪亮了一对双眼金睛,从那双眼金睛中使劲儿拉出来了委托字样和模式。
'大家请继续保持精神!因为,本大魔王正在破旧的餐桌上演讲呢
'委托的第一的作用;
'举一个Task任务类型的对象来说明问题吧!
'Task对象是由微软设计出来的,美利坚合众国微软是代码的设计者。
'Task对象创建过程中分为可预知的部分和不可预知的部分组成。
'代码的设计者在设计阶段可预知的部分是由代码的设计者自己预定义完成相关功能,例如;Start,Wait,Result等等众多可预知功能。
'但是,代码的设计者不可预知的部分是什么呢???
'因为,Task对象是属于线程操作类型的。但是代码的设计者并不知道代码的使用者在此Task上具体需要实现什么样的功能,
'这就是代码的设计者设计阶段面临的得了感冒一般头疼的问题。
'上面已经提到,美国微软已经发明了<委托>。现在已经是派上用场的时候了!!!
'代码的设计者在设计阶段不可预知的部分直接委托给代码的使用者,使代码的使用者自己定义实现具体功能。
'同时,代码的设计者并不需要关心代码的使用者具体需要什么样的功能了。
'如果,没有委托那怎样了? 其结果是每个用户的使用者可能需要的功能上达几百种甚至几千种更是天文数字啊!!!
'这样的状态下代码的设计者永远无法做到满足,代码的使用者也无法使用如此繁多的功能列表上查找使用!
'有了委托就解决了如上的所有难题。
'委托的第二作用;
'本大魔王举一个最简单的小学一年级加减乘除+-*/来讲课。
Private Function MyFunc1(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 + Math1
End Function
Private Function MyFunc2(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 - Math1
End Function
Private Function MyFunc3(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 * Math1
End Function
Private Function MyFunc4(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 / Math1
End Function
'请看上面定义的四个函数,实现加减乘除功能使用了四个函数。
'如果,在公共函数中代码的设计者如此这样模式设计,vb.net的函数列表中能看到无法承受的庞大的函数纵队!!!
'估计本大魔王也用不了!
'这时候委托该派上用场了!!!
'请看下面代码的设计者设计的一个函数。
'这个函数使用了委托,代码的使用者凭借这样设计的唯一一个函数,都能自定义实现加减乘除4个功能!!!
Private Function MyFunc(ByVal Math1 As Integer, ByVal Func1 As Func(Of Integer, Integer, Integer)) As Integer
Const Val1 As Integer = 20
Return Func1.Invoke(Val1, Math1)
End Function
'代码的使用者使用过程中自定义实现功能。
'具体如下;
Sub MySub()
Dim Result1 As Integer
'代码的使用者自定义实现加法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a + b)
'代码的使用者自定义实现减法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a - b)
'代码的使用者自定义实现乘法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a * b)
'代码的使用者自定义实现除法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a / b)
End Sub
'委托的第三作用;
'这个大家自己寻找答案吧! 免费已经足够了!!!
'本大魔王继续演讲委托的类型问题。
'委托本身具有委托类型,代码的设计者通过声明委托,然后使用者实例化实现自定义功能。
'委托类型是lambda表达式类型的。所以,只能用Sub,Function这2种类型的。
'使用环境不同出现了2种类型的实例化委托方式,就是lambda表达式和AddressOf这2种类型来实例化委托。
'其中AddressOf关键字只用来引用带名称的Sub或Function时使用。lambda表达式则直接在委托上实例化。
'所以,本大魔王的结论是委托实质是Sub或Function的抽象。代码的设计者不可预知的部分委托给使用者,而且代码的设计者只是做了Sub或Function的抽象。
'代码的使用者使用阶段具体化Sub或Function,代码的使用者由此梦想成真自定义实现具体功能。
'我的小魔王出来鼓掌一下, 激发本大魔王威力无比的智慧!
'最后强调本大魔王是一个大家认识的高丽棒子!
'网上忽悠概念的人实在是太多。
'有人说委托是安全类型的指针函数,又有人说委托是委托给别人结果带回来等等让人苦笑不得的局面层出不穷。
'
End Class
#25
好牛B哦,楼主尽然能打这么多的汉字。!
解释一委托,尽然用一个Task来说明。太牛B了。
#26
看完了....
你代码上面举的例子,不就是 '安全类型的指针函数" 么
你代码上面举的例子,不就是 '安全类型的指针函数" 么
#27
最后强调本大魔王是一个大家认识的高丽棒子!
亮了
亮了
#1
从语言上来判断,lz幼年和青年时期遭遇过严重得创伤啊。
#2
不就是一个函数指针吗? 至于让你这样子么 ?
#3
这是重度中二病症状,之前就有恶化的趋势,虽然很多热心人极力挽救,可是没想到还是发展到晚期了。果然中二是无药可救的么 ╮(╯▽╰)╭
#4
面向对象类型安全的函数指针
#5
#6
我不发表言论,坐等老师开讲
顺便问一下,去年发的几个贴子你到底想什么时候结啊?
顺便问一下,去年发的几个贴子你到底想什么时候结啊?
#7
楼主,说下你的理解
#8
楼上说的对!!!
#9
不就是一个函数指针吗? 至于让你这样子么 ?
您的答案是错误了。vb.net中不会产生任何使用价值。
如果,把委托定义为'类型安全的函数指针',这将抹杀vb.net中委托本应有的重要地位和特殊能力。
连委托的作用和意义是什么,什么侍候使用也搞不清楚。
您要谈论函数指针这个功能问题,应该其他编程语言环境中讨论。
#10
哈哈! 恐怕能过关本大魔王考试的真的不存在。
这么长时间等待了没有胆敢露面应试,好像害怕自己的答案错误。
所以,本大魔王要抽出宝贵时间这几天内准备教程!
这么长时间等待了没有胆敢露面应试,好像害怕自己的答案错误。
所以,本大魔王要抽出宝贵时间这几天内准备教程!
#11
委托就是给把菜刀你帮我去抢银行,我的回答太完美了。
#12
委托就是让你可以传递方法,至于么,由此可以减少大量的接口定义
#13
委托就是给把菜刀你帮我去抢银行,我的回答太完美了。
以这个为例子的话,应该是说设计了一个抢劫银行的案例,但具体以什么作为武器,然后如何抢劫还没定好,让下面各自去想办法,你们拿着刀去银行,很光棍的说“抢劫”也好;还是拿把枪,排着队,轮到时把枪指着业务人员说“抢劫”也好,反正最终实现者一定要把钱给抢来,如果抢不来,那就异常
#14
委托就是给把菜刀你帮我去抢银行,我的回答太完美了。
以这个为例子的话,应该是说设计了一个抢劫银行的案例,但具体以什么作为武器,然后如何抢劫还没定好,让下面各自去想办法,你们拿着刀去银行,很光棍的说“抢劫”也好;还是拿把枪,排着队,轮到时把枪指着业务人员说“抢劫”也好,反正最终实现者一定要把钱给抢来,如果抢不来,那就异常
委托是叫你帮我抢银行,给把菜刀你是传递了菜刀的参数抢银行,介于楼主的问题只是委托,所以具体实践的方法由受委托人自己写
#15
委托就是给把菜刀你帮我去抢银行,我的回答太完美了。
您的答案是错了。因为,vb,net中委托人没有具体要求和指令。
却被委托人才有具体指令和行为。
#16
委托就是让你可以传递方法,至于么,由此可以减少大量的接口定义
您的答案也错了。 委托的目的不是为了大量减少借口而存在。
#17
4楼总结的比较到位,就这么点事,何必哗众取宠
#18
没一个人中出答案就扔垃圾桶了.
时间是7天内完成。
我虽然不会日语,但是会搜索一下“中出”这个词儿的含义的!
这种疯话你让别人怎么回答啊?别人回答就是“中出”啊?!哦,FCK。
#19
【词目】委托
【释义】把事情托付给别人或别的机构(办理)
【例句】这些产品是另一家公司委托我们生产出来的。
【同义词】付托、交托
能不能来点干的?每次都标着原创教程,然后出了个题,然后糊里糊涂就放置play了
【释义】把事情托付给别人或别的机构(办理)
【例句】这些产品是另一家公司委托我们生产出来的。
【同义词】付托、交托
能不能来点干的?每次都标着原创教程,然后出了个题,然后糊里糊涂就放置play了
#20
我能呵呵吗?
#21
重度中二少年
#22
看了看楼主之前发的帖子,我决定关注你,当你的粉丝。
写代码的人之中能像楼主这般有娱乐精神的人不多了
写代码的人之中能像楼主这般有娱乐精神的人不多了
#23
看了看楼主之前发的帖子,我决定关注你,当你的粉丝。
写代码的人之中能像楼主这般有娱乐精神的人不多了
看了此人以前的帖子,只能呵呵了,就这水平,呵呵
#24
Public Class Class1
'什么是叫委托,委托的意义和作用。
'委托概念的产生原因是因为分别出现了代码的设计者和使用者的关系。
'因为这种设计者与使用者的关系的原因,就出现了代码的设计者一系列预定义问题。
'代码的设计者设计阶段有一个面临实现关键核心功能具体化问题,主要是代码的设计者并不知道代码的使用者具体要求什么样的功能。
'因为,代码的设计者来说代码的使用者需要的功能可能是几百种甚至几千种都可能!!!
'这就是代码的设计者设计阶段面临的最头疼的问题。
'微软长期挖苦中突然闪亮了一对双眼金睛,从那双眼金睛中使劲儿拉出来了委托字样和模式。
'大家请继续保持精神!因为,本大魔王正在破旧的餐桌上演讲呢
'委托的第一的作用;
'举一个Task任务类型的对象来说明问题吧!
'Task对象是由微软设计出来的,美利坚合众国微软是代码的设计者。
'Task对象创建过程中分为可预知的部分和不可预知的部分组成。
'代码的设计者在设计阶段可预知的部分是由代码的设计者自己预定义完成相关功能,例如;Start,Wait,Result等等众多可预知功能。
'但是,代码的设计者不可预知的部分是什么呢???
'因为,Task对象是属于线程操作类型的。但是代码的设计者并不知道代码的使用者在此Task上具体需要实现什么样的功能,
'这就是代码的设计者设计阶段面临的得了感冒一般头疼的问题。
'上面已经提到,美国微软已经发明了<委托>。现在已经是派上用场的时候了!!!
'代码的设计者在设计阶段不可预知的部分直接委托给代码的使用者,使代码的使用者自己定义实现具体功能。
'同时,代码的设计者并不需要关心代码的使用者具体需要什么样的功能了。
'如果,没有委托那怎样了? 其结果是每个用户的使用者可能需要的功能上达几百种甚至几千种更是天文数字啊!!!
'这样的状态下代码的设计者永远无法做到满足,代码的使用者也无法使用如此繁多的功能列表上查找使用!
'有了委托就解决了如上的所有难题。
'委托的第二作用;
'本大魔王举一个最简单的小学一年级加减乘除+-*/来讲课。
Private Function MyFunc1(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 + Math1
End Function
Private Function MyFunc2(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 - Math1
End Function
Private Function MyFunc3(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 * Math1
End Function
Private Function MyFunc4(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 / Math1
End Function
'请看上面定义的四个函数,实现加减乘除功能使用了四个函数。
'如果,在公共函数中代码的设计者如此这样模式设计,vb.net的函数列表中能看到无法承受的庞大的函数纵队!!!
'估计本大魔王也用不了!
'这时候委托该派上用场了!!!
'请看下面代码的设计者设计的一个函数。
'这个函数使用了委托,代码的使用者凭借这样设计的唯一一个函数,都能自定义实现加减乘除4个功能!!!
Private Function MyFunc(ByVal Math1 As Integer, ByVal Func1 As Func(Of Integer, Integer, Integer)) As Integer
Const Val1 As Integer = 20
Return Func1.Invoke(Val1, Math1)
End Function
'代码的使用者使用过程中自定义实现功能。
'具体如下;
Sub MySub()
Dim Result1 As Integer
'代码的使用者自定义实现加法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a + b)
'代码的使用者自定义实现减法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a - b)
'代码的使用者自定义实现乘法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a * b)
'代码的使用者自定义实现除法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a / b)
End Sub
'委托的第三作用;
'这个大家自己寻找答案吧! 免费已经足够了!!!
'本大魔王继续演讲委托的类型问题。
'委托本身具有委托类型,代码的设计者通过声明委托,然后使用者实例化实现自定义功能。
'委托类型是lambda表达式类型的。所以,只能用Sub,Function这2种类型的。
'使用环境不同出现了2种类型的实例化委托方式,就是lambda表达式和AddressOf这2种类型来实例化委托。
'其中AddressOf关键字只用来引用带名称的Sub或Function时使用。lambda表达式则直接在委托上实例化。
'所以,本大魔王的结论是委托实质是Sub或Function的抽象。代码的设计者不可预知的部分委托给使用者,而且代码的设计者只是做了Sub或Function的抽象。
'代码的使用者使用阶段具体化Sub或Function,代码的使用者由此梦想成真自定义实现具体功能。
'我的小魔王出来鼓掌一下, 激发本大魔王威力无比的智慧!
'最后强调本大魔王是一个大家认识的高丽棒子!
'网上忽悠概念的人实在是太多。
'有人说委托是安全类型的指针函数,又有人说委托是委托给别人结果带回来等等让人苦笑不得的局面层出不穷。
'
End Class
'什么是叫委托,委托的意义和作用。
'委托概念的产生原因是因为分别出现了代码的设计者和使用者的关系。
'因为这种设计者与使用者的关系的原因,就出现了代码的设计者一系列预定义问题。
'代码的设计者设计阶段有一个面临实现关键核心功能具体化问题,主要是代码的设计者并不知道代码的使用者具体要求什么样的功能。
'因为,代码的设计者来说代码的使用者需要的功能可能是几百种甚至几千种都可能!!!
'这就是代码的设计者设计阶段面临的最头疼的问题。
'微软长期挖苦中突然闪亮了一对双眼金睛,从那双眼金睛中使劲儿拉出来了委托字样和模式。
'大家请继续保持精神!因为,本大魔王正在破旧的餐桌上演讲呢
'委托的第一的作用;
'举一个Task任务类型的对象来说明问题吧!
'Task对象是由微软设计出来的,美利坚合众国微软是代码的设计者。
'Task对象创建过程中分为可预知的部分和不可预知的部分组成。
'代码的设计者在设计阶段可预知的部分是由代码的设计者自己预定义完成相关功能,例如;Start,Wait,Result等等众多可预知功能。
'但是,代码的设计者不可预知的部分是什么呢???
'因为,Task对象是属于线程操作类型的。但是代码的设计者并不知道代码的使用者在此Task上具体需要实现什么样的功能,
'这就是代码的设计者设计阶段面临的得了感冒一般头疼的问题。
'上面已经提到,美国微软已经发明了<委托>。现在已经是派上用场的时候了!!!
'代码的设计者在设计阶段不可预知的部分直接委托给代码的使用者,使代码的使用者自己定义实现具体功能。
'同时,代码的设计者并不需要关心代码的使用者具体需要什么样的功能了。
'如果,没有委托那怎样了? 其结果是每个用户的使用者可能需要的功能上达几百种甚至几千种更是天文数字啊!!!
'这样的状态下代码的设计者永远无法做到满足,代码的使用者也无法使用如此繁多的功能列表上查找使用!
'有了委托就解决了如上的所有难题。
'委托的第二作用;
'本大魔王举一个最简单的小学一年级加减乘除+-*/来讲课。
Private Function MyFunc1(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 + Math1
End Function
Private Function MyFunc2(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 - Math1
End Function
Private Function MyFunc3(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 * Math1
End Function
Private Function MyFunc4(ByVal Math1 As Integer) As Integer
Const Val1 As Integer = 20
Return Val1 / Math1
End Function
'请看上面定义的四个函数,实现加减乘除功能使用了四个函数。
'如果,在公共函数中代码的设计者如此这样模式设计,vb.net的函数列表中能看到无法承受的庞大的函数纵队!!!
'估计本大魔王也用不了!
'这时候委托该派上用场了!!!
'请看下面代码的设计者设计的一个函数。
'这个函数使用了委托,代码的使用者凭借这样设计的唯一一个函数,都能自定义实现加减乘除4个功能!!!
Private Function MyFunc(ByVal Math1 As Integer, ByVal Func1 As Func(Of Integer, Integer, Integer)) As Integer
Const Val1 As Integer = 20
Return Func1.Invoke(Val1, Math1)
End Function
'代码的使用者使用过程中自定义实现功能。
'具体如下;
Sub MySub()
Dim Result1 As Integer
'代码的使用者自定义实现加法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a + b)
'代码的使用者自定义实现减法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a - b)
'代码的使用者自定义实现乘法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a * b)
'代码的使用者自定义实现除法功能;
Result1 = MyFunc(5, Function(a As Integer, b As Integer) a / b)
End Sub
'委托的第三作用;
'这个大家自己寻找答案吧! 免费已经足够了!!!
'本大魔王继续演讲委托的类型问题。
'委托本身具有委托类型,代码的设计者通过声明委托,然后使用者实例化实现自定义功能。
'委托类型是lambda表达式类型的。所以,只能用Sub,Function这2种类型的。
'使用环境不同出现了2种类型的实例化委托方式,就是lambda表达式和AddressOf这2种类型来实例化委托。
'其中AddressOf关键字只用来引用带名称的Sub或Function时使用。lambda表达式则直接在委托上实例化。
'所以,本大魔王的结论是委托实质是Sub或Function的抽象。代码的设计者不可预知的部分委托给使用者,而且代码的设计者只是做了Sub或Function的抽象。
'代码的使用者使用阶段具体化Sub或Function,代码的使用者由此梦想成真自定义实现具体功能。
'我的小魔王出来鼓掌一下, 激发本大魔王威力无比的智慧!
'最后强调本大魔王是一个大家认识的高丽棒子!
'网上忽悠概念的人实在是太多。
'有人说委托是安全类型的指针函数,又有人说委托是委托给别人结果带回来等等让人苦笑不得的局面层出不穷。
'
End Class
#25
好牛B哦,楼主尽然能打这么多的汉字。!
解释一委托,尽然用一个Task来说明。太牛B了。
#26
看完了....
你代码上面举的例子,不就是 '安全类型的指针函数" 么
你代码上面举的例子,不就是 '安全类型的指针函数" 么
#27
最后强调本大魔王是一个大家认识的高丽棒子!
亮了
亮了