换一个角理解委托和事件

换一个角度理解委托和事件如果你还为委托和事件犯迷糊,你可以试着回答下面这些问题:让你来设计一个框架(或者程序)实现效果:点击button时实现label1.text=“呵呵,第一次点击!”,你会怎么处理?注意,不要用已经实现的框架。我们会想,在windows系统里应该有一个监听程序,专门处理鼠标点击事件,一旦button被点击,他就会执行一定的程序。大概应该像下面的伪代码一样:ListenerMethod(){if(button.clicked){……}}我就可以在{}里写上label1.text=“呵呵,第一次点击”,搞定!如果要实现其他内容,比如再一次点击,就label.text=“没问题,第二次点击”。到此为止,你发现问题么?如果还没有发现,呵呵,你就有问题了。我也是在学习了“设计模式”之后才想到的,如果按上面的方法实现,就:1、你必须把ListenerMethod()方法的具体内容公布出来,不然人家怎么用呢,这些执行的代码写在哪里呢?2、把方法公开是不好的,为什么?最简单的,怕人家看了干坏事呀,黑客是怎么出来的?呵呵,这其实只是一方面,更实际的原因甚至是防止自己误操作……不多说了,理解关键字“封装”!接着想,我要不把ListenerMethod()方法暴露出来要怎么办。可不可以事先写好一个方法,放在{}里,其他人在其他地方写实现的代码,如:ListenerMethod(){if(button.clicked){TheMethod();//只要按钮被点击就执行这个方法;}}---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---而在另外的地方设好方法名和参数,让其他人填空,如下TheMethod(){……//里面的内容由其他人(专业点的词汇叫做“用户”)填写}哈哈,有点像了。我们好像也是这样在buttonClick()方法里写实现程序的哟。这样做,还是有问题,能不能想到?现在我们是一个button,如果有两个button要实现各自不同的的功能呢,怎么办?我写两个if,哼!三个呢,四个呢……实际上,我做框架的时候还根本不知道会有多少个呢,唉~~再想!这就要回到最前面猜想的地方了。button和Listener之间是不是要有对应关系?这种对应关系如何实现?我们可以想象,计算机系统里面有一个管理鼠标点击button的监听中心,每个button都可以到这个中心“注册登记”他对应的方法,这样,当特定的button被点击时,监听中心可以根据之前的“登记”,执行相应的方法。看上去上面的方法不错,赞自己一个。那么如何实现上面的构想呢?当然就是用委托和事件了。可能你还是没怎么搞明白,我也一样,那我们试着动手写程序吧。为了脱离winform之类已有的框架,我们建一个控制台程序。未使用委托、事件之前的代码。classProgram{staticvoidMain(string[]args){//实例化一个button类Buttonbtn=newButton();btn.Click();}}//首先要定义一个Button类,里面应该有一个Click方法publicclassButton{---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---//Click方法调用固定的方法publicvoidClick(){ForCustomefc=newForCustome();fc.Button_Click();}}//上面这个类是封装了的,用户不可见,或者理解为用户不能更改也可以//下面这个类提供给用户publicclassForCustome{publicvoidButton_Click(){//用户在这里写具体的方法实现Console.WriteLine("被点击了!");}}可以看出,以上的代码实现一个按钮是可行的,但两个按钮就麻烦了。不到黄河心不甘,我们硬着头皮再写两个按钮的情况吧。classProgram{staticvoidMain(string[]args){//实例化一个button类Buttonbtn=newButton();btn.Click();//实例化第二个buttonButtonbtn2=newButton();btn.Click();//这样写能行么?}}//首先要定义一个Button类,里面应该有一个Click方法publicclassButton{//Click方法调用固定的方法publicvoidClick(){ForCustomefc=newForCustome();fc.Button_Click();---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---//很想在这里面改呀,添一个方法调用fc.Button2_Click();//要是再有一段条件判断的逻辑就更好了,是吧?}}//上面这个类是封装了的,用户不可见,或者理解为用户不能更改也可以//下面这个类提供给用户publicclassForCustome{p...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?