福利:工作这些年,辛苦收集了很多类库,很多都是用在了项目中,非常实用,如有需要请在评论区评论和点赞>>注关注本头条号>>进入头条号页面,右上角私信功能,私信回复“类库”即可
文章插图
今天看到一篇讲委托讲得很不错的文章,分享给大家委的应用托应用非常广泛,但是,委托对很多初学的人来说并不容易 。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,没有弄懂的人每次见到委托就觉得心里憋得慌 。下面我们通过一个简单的例子通俗易懂的来介绍一下什么是委托
把方法作为方法的参数我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问候的话语:
文章插图
这两个方法就是为了举个例子,请不要纠结他的作用 。GreetPeople方法 用于向某人问好,当我们传入 name ,比如说“Jimmy”,在这个方法中,将调用 EnglishGreeting方法,再次将name作为参数传入EnglishGreeting 方法,EnglishGreeting 则用于向屏幕输出 “Morning, Jimmy” 。
现在假设甲方爸爸要求把这个程序多加入几门语言进行显示,比如小王是中国人,就要显示“早上好,小王”?好吧,为了满足需求,我们再加个中文版的问候方法:
文章插图
当然,GreetPeople 方法也需要调整一下,需要加入判断到底用调用哪个版本的 Greeting 问候方法,在进行这个之前,定义一个枚举变量作为判断的依据:
文章插图
搞定啦!,虽然这样问题是解决了,但是大家应该很容易发现了问题,这个解决方案的可扩展性太差,万一今后甲方爸爸要我们再添加西班牙文版、阿拉伯语版,就需要反复的改动枚举和 GreetPeople()方法,来适应新的需求 。
有没有办法解决这个问题呢?,我们暗中观察一下 GreetPeople 的方法签名:
这个方法的第一个参数 string name,在这里,string 是参数类型,name 是参数变量,当我们赋给 name字符串“jimmy”时,它就代表“jimmy”这个值;当我们赋给它“王胖子”时,它又代表着“王胖子”这个值 。然后,在方法体中,我们就可以根据name这个参数的值来进行相应的判断和操作 。
如果你再仔细想想,假如 GreetPeople()方法可以接受一个参数变量,这个变量可以代表另一个方法,当我们给这个变量赋值 EnglishGreeting方法的时候,它就会去自动调用EnglsihGreeting() 这个方法;当我们给这个变量赋值ChineseGreeting 的时候,它就会去自动调用ChineseGreeting()方法 。如果我们将这个参数变量命名为MakeGreeting,那么不是可以如同给 name 赋值时一样,在调用GreetPeople()方法的时候,给这个 MakeGreeting 参数也赋上值么(ChineseGreeting 或者EnglsihGreeting 等)?然后,我们在方法体内,也可以像使用别的参数一样使用 MakeGreeting 。比如上一段中提到的name,但是,由于 MakeGreeting 代表着一个方法,它的使用方式应该和它被赋的方法 (比如chineseGreeting)是一样的,比如:
MakeGreeting(name);
好了,根据这个思路,我们来改造一下 GreetPeople()方法,如果真的能像上一段提到的方式来实现,那么这个方法应该长这样:
文章插图
注意到 *** ,这个位置通常放置的应该是参数的类型,但到目前为止,我们仅仅是想到应该有个可以代表方法的参数,并按这个思路去改写 GreetPeople 方法,现在就出现了一个大问题:这个代表着方法的 MakeGreeting 参数应该是什么类型的?就是说 ***应该填什么类型呢?bool?string?int?
为了解决这个问题,现在就该是我们的英雄---委托小超人出场了,在介绍委托之前,我们先看看ChineseGreeting()和 EnglishGreeting()方法:
文章插图
函数在执行前需要声明,委托同样也需要声明,我们根据ChineseGreeting()和 EnglishGreeting()的参数定义委托:
文章插图
现在,让我们再次改动 GreetPeople()方法,如下所示:
- 这印记有什么作用 什么的印记
- LOL手游破晓杯将至
- 八字中的食神代表什么?人八字中有食神是什么命运
- 官杀在八字命理中代表的人物类像
- 盘点手游中的经典角色 什么手游角色好看
- 最好用的手机垃圾清理工具在此 手机安装什么清理软件好
- 帮父母选手机 给父亲买什么手机好
- 在感情中最被动的生肖男,哪些生肖男在感情中最被动
- 智能投影仪什么牌子好 手机投影仪什么品牌好
- 感情中最迟钝的三大生肖,感情中最迟钝的生肖