总结一下C#中个人对于使用委托的理解

之前也看过很多关于讲委托的资料,看到别人这么用也暂时看得懂,这次陆敏技老师的培训中需要自己动手用委托设计类,来体现类的解耦性,我才发现自己根本不懂什么是委托,应该怎么用,为什么用。今天把自己的理解记录下来,自己给自己提问,加深对于基础知识的理解,也算是备忘了。

1、什么是委托
委托是一种类型,这种类型是跟方法相关联的,委托类型可以有返回值和参数,不过这个返回值和参数必须和后面定义要传入的委托处理器相一致;
比如:实验中的public delegate void HiddenCurrentMouseHandler();
HiddenCurrentMouseHandler就是我们自定义的类型,是委托类型,可以和自定义的Class类一样理解。

2、委托类型干嘛用的
声明一个委托类型的实例变量,这个变量可以接收一个方法(也就是委托处理器),在封装的类里面直接调用委托变量名称即可实现传入的委托处理器实现的功能;
比如:实验中的protected HiddenCurrentMouseHandler HiddenCurrentMouse;
HiddenCurrentMouse是声明的一个实例变量,可以声明一个类的实例变量一样理解,他是一个委托的实例,和普通类的实例变量的区别是,委托实例变量可以被赋值一个方法的引用。

3、为什么用委托呢
自己先思考一下如果不用委托我怎么来实现打老鼠隐藏的功能吧,因为老鼠的隐藏会用到VS控件来展示,当点击开始按钮,老鼠的隐藏需要在FORM的cs文件里面来实现,开始按钮的代码,隐藏当前老鼠的代码,我们都要写在form的cs文件里面。如果用面向对象的思路写代码,就必须把处理业务逻辑的代码和处理ui展示的form.cs代码分开来,这样的话要改动之前写的大量代码。

4、用委托的思路是什么
把当前类要实现的功能进行封装,如果需要一个变量来传递一个方法来实现某一功能的时候,我们就可以在当前类中声明一个委托类型,用这个委托类型的实例变量作为本类和外部类联系的一个纽带。在外部类进行调用的时候,主要传入我们需要实现的方法即可(针对外部调用类自定义的委托处理器),这样如果我们实现不同的功能,只要修改这个委托处理器即可。

5、总结一下委托实现的步骤
根据实验可知,我们需要把游戏实现的代码封装到一个gameprocessor这个类中,这个类中的开始、暂定、停止的方法中都需要用到FORM中的控件的隐藏当前老鼠、显示下一只老鼠,显示分数来实现,我们需要在当前类中定义这些功能的委托类型,并声明这三个功能的委托变量。但是在gameprocessor中我们并不需要关系form.cs里面的控件到底是什么,他的目的只要知道你把你定义的委托处理器传给我声明的委托实例中来,而且你传入的委托实例的返回值和参数要和我的委托类型定义的一致。因此委托变量就是受gameproccessor中的方法要实现功能的委托,来传递一个方法来,他接受从form.cs类里面穿过来的方法,在gameprocessor中来调用隐藏、显示和分数这些需要form类中才能调用的控件。

posted on 2013-03-11 13:10  王阿冰  阅读(219)  评论(0编辑  收藏  举报

导航