1.C#中的事件和委托的作用?
事件代表一个组件能够被关注的一种信号,比如你的大肠会向你发出想拉屎的信号,你就可以接收到上厕所。
委托是可以把一个过程封装成变量进行传递并且执行的对象,比如你上蹲坑和上坐马桶拉屎的方式是不一样的,但是你的大脑不需要知道两种方式的不同,只需要在蹲坑的时候获取身体用于蹲位姿势的委托进行调用拉屎,在坐马桶的时候获取坐姿的委托进行调用拉屎。
2.他们之间的关系?
委托是一种类型,事件是一种成员,就相当于public int Age {get;set;}这个属性中,int就是类型,Age是一个成员,public event EventHandler Push;这个事件中EventHandler就是委托类型,Push是事件他是一个成员。
3.和什么情况使用委托和事件?
事件是组件中的抽象概念,同样包括状态和操作也是组件中的概念,对应到C#里面就是属性和方法。所以像控件之类的组件都会有事件。而委托代表一个代码的执行过程,C#3.0引入linq以后,用的就非常频繁了。
4.但是用事件的方式来调用的话有什么好处?
事件是一种封装,就好像属性会封装字段一样,可以把定义和实现隔离开来,给你举个例子就是DateTime实际上你看那么多属性,其实里面只有一个字段存储时间,各种日期啊年啊属性都是根据这个时间算出来的。事件也把内部类型为一个委托的字段封装起来,这样在类的外部就只能使用事件来注册或者注销事件关注,而不能引发事件。就好像你拉不拉屎不由其他人控制一样。
5.添加了委托一定要再定义事件来调用么?
看情况,你可以不用属性封装字段,但是在代码设计上来说,或者面向组件设计上来说,封装是一种设计原则,你学过设计模式,或者参与过大型系统的设计就会很容易理解这点。
6/什么情况下只要使用委托就可以,什么情况下必须配合事件使用?
一般情况下建立组件模型都使用事件
把参数的方法体作为方法的参数。
在VB中我们一个窗体使用工程中另一个窗体的参数,直接窗体名加窗体使用,在C#中行不通,要封装他的属性。委托差不多也是做这样的事,一个成员他可以自定义方法,方法可以作为其他方法的成员调用方法的参数,灵活性很高。又打个简单的比方,按钮事件除Click事件本身,是不是大部分都有个button_click事件作为成员,他触发判断鼠标是否点击,那他就是这作用。
委托是方法做参数,事件是让委托可以公开调用
首先,你要搞明白委托和事件是什么意思。
1、委托就是当前程序接收到一个字段以后,它本身并不具有处理这个字段的能力,需要委托给专门的、私有静态的方法去处理,等待这个方法回传的值即可;
2、事件,是当触发了什么事情以后,才执行的方法;
从定义上,已经把你的4、5问题阐述的很清楚了。你的6号问题呢,个人觉得事件就应该属于触发某些特定事情的时候,才去执行为好,委托呢,能够大大节省你主要方法的代码量,易于修改。
要理解事件,首先你要清楚理解委托的用处和本质。然后再去探究事件。
事件从本质上来说是委托,不过在使用上比委托多了一个限制:事件只能在定义事件的类内部被调用,而委托可以在任意方法中被调用(难就难在理解这句)。
面向对象思想编程的一个特点就是尽可能的在软件中反应现实世界的关系和特点。
我们基本上可以说:事件是委托,委托是方法指针,在调用委托的时候跟调用方法是一样的。
一般来说,这个限制正好用在封装组件类的时候体现了封装特性。