[C#]委托实例分析(附源码)
2014-12-10 22:45
197 查看
一直都听说C#中的委托与事件非常重要,都没有什么切身的体会,而这次通过做一个WinForm二次开发的项目才真正感觉到了委托与事件的犀利之处。
//定义带参数的委托与两个事件
//这是委托与事件的第一步
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());
1.C#中的事件和委托的作用?
事件代表一个组件能够被关注的一种信号,委托是可以把一个过程封装成变量进行传递并且执行的对象。
2.他们之间的关系?
委托是一种类型,事件是一种成员,就相当于publicintAge{get;set;}这个属性中,int就是类型,Age是一个成员,publiceventEventHandlerPush;这个事件中EventHandler就是委托类型,Push是事件,他是一个成员。
事件从本质上来说是委托,不过在使用上比委托多了一个限制:事件只能在定义事件的类内部被调用,而委托可以在任意方法中被调用(难就难在理解这句)。
我们基本上可以说:事件是委托,委托是方法指针,在调用委托的时候跟调用方法是一样的。一般来说,这个限制正好用在封装组件类的时候体现了封装特性。
3.和什么情况使用委托和事件? 事件是组件中的抽象概念,同样包括状态和操作也是组件中的概念,对应到C#里面就是属性和方法。所以像控件之类的组件都会有事件。而委托代表一个代码的执行过程,C#3.0引入linq以后,用的就非常频繁了。
4.但是用事件的方式来调用的话有什么好处? 事件是一种封装,就好像属性会封装字段一样,可以把定义和实现隔离开来,给你举个例子就是DateTime实际上你看那么多属性,其实里面只有一个字段存储时间,各种日期啊年啊属性都是根据这个时间算出来的。事件也把内部类型为一个委托的字段封装起来,这样在类的外部就只能使用事件来注册或者注销事件关注,而不能引发事件。
实例: 我们要达到这样的效果:
就是点击Form3中的数字选框时使Form1中的文本框联动 那么可以使用委托来完成: 第一步:在Form3.cs中定义委托与事件:
第二步:在Form1.cs中将方法注册到委托上:
第三步:在Form3.cs中使用委托:
代码下载:委托与事件实例.rar
相关文章推荐
- C#异步委托调用实例分析
- C#中委托用法实例分析
- Web C#2.0 DataSet和Reader封装组件实现自动多数据库切换(含组件源码和实例)
- ASP.Net C#2.0全能数据库组件 (含下载实例源码地址)
- 蔡军生先生第二人生的源码分析(7)应用程序实例类
- C#中委托和事件的一个简单实例
- [C#] C#事件与接口实例讲解分析
- 用c#编写一个vb 工程源码分析工具(带源码工程下载)
- ASP.Net C#2.0全能数据库组件 (开源含实例源码)|
- C#实践——委托实例应用
- C#分析数据库结构,使用XSL模板自动生成代码 - 清清月儿 .NET万花筒 Asp.net技术 Asp.net教程 Asp.net源码 Asp.net基础 Asp.net控件 Asp.net入门 - CSDNBlog
- C#开发COM组件实例(附源码)
- 实例分析:事件与委托
- 【C#winform源码实例】datagrid显示主细表
- Web C#2.0 DataSet和Reader封装组件实现自动多数据库切换(含组件源码和实例)
- c#中的委托和事件的简单实例_c#应用
- [转贴] ASP.Net C#2.0全能数据库组件 (含下载实例源码地址)
- Web C#2.0 DataSet和Reader封装组件实现自动多数据库切换(含组件源码和实例)
- 第二人生的源码分析(七十六)判断程序运行多个实例
- 蔡军生先生第二人生的源码分析(七十六)判断程序运行多个实例