您的位置:首页 > 编程语言 > C#

[C#]委托实例分析(附源码)

2014-12-10 22:45 197 查看
  一直都听说C#中的委托与事件非常重要,都没有什么切身的体会,而这次通过做一个WinForm二次开发的项目才真正感觉到了委托与事件的犀利之处。

1.C#中的事件和委托的作用?

  事件代表一个组件能够被关注的一种信号,委托是可以把一个过程封装成变量进行传递并且执行的对象。

2.他们之间的关系?

  委托是一种类型,事件是一种成员,就相当于publicintAge{get;set;}这个属性中,int就是类型,Age是一个成员,publiceventEventHandlerPush;这个事件中EventHandler就是委托类型,Push是事件,他是一个成员。

  事件从本质上来说是委托,不过在使用上比委托多了一个限制:事件只能在定义事件的类内部被调用,而委托可以在任意方法中被调用(难就难在理解这句)。

  我们基本上可以说:事件是委托,委托是方法指针,在调用委托的时候跟调用方法是一样的。一般来说,这个限制正好用在封装组件类的时候体现了封装特性。

3.和什么情况使用委托和事件?
  事件是组件中的抽象概念,同样包括状态和操作也是组件中的概念,对应到C#里面就是属性和方法。所以像控件之类的组件都会有事件。而委托代表一个代码的执行过程,C#3.0引入linq以后,用的就非常频繁了。

4.但是用事件的方式来调用的话有什么好处?
  事件是一种封装,就好像属性会封装字段一样,可以把定义和实现隔离开来,给你举个例子就是DateTime实际上你看那么多属性,其实里面只有一个字段存储时间,各种日期啊年啊属性都是根据这个时间算出来的。事件也把内部类型为一个委托的字段封装起来,这样在类的外部就只能使用事件来注册或者注销事件关注,而不能引发事件。


实例:  我们要达到这样的效果:
  




就是点击Form3中的数字选框时使Form1中的文本框联动
那么可以使用委托来完成:
第一步:在Form3.cs中定义委托与事件:


//定义带参数的委托与两个事件 //这是委托与事件的第一步 publicdelegatevoidForm2Handle(strings); publiceventForm2Handlechanged;

 第二步:在Form1.cs中将方法注册到委托上:

//改变值的事件 privatevoidchanged(strings) { //此处是给原有窗体中控件赋值 this.textBox1.Text=s+s; } privatevoidbutton2_Click(objectsender,EventArgse) { Form3frm3=newForm3(); //这是委托与事件的第二步, //写到+=时,按两次Tab键会自动生成frm2_changed,frm3_empty两个事件 frm3.changed+=newForm3.Form2Handle(changed);//改变值的事件 frm3.ShowDialog(); }

  第三步:在Form3.cs中使用委托:

//这是委托与事件的第三步 //传值 changed(numericUpDown1.Value.ToString());

代码下载:委托与事件实例.rar


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: