event与delegate的区别------------事件是封装的委托
如何封装:(事件的声明)
首先,通过加入event关键字,在编译的时候编译器会自动针对事件生成一个私有的字段(与此事件相关的委托变量),用于调用方法,以及两个访问器方法,即add访问器方法,对事件使用+=操作时就是调用的这个方法。以及remove访问器方法,对事件使用-=操作时就是调用的这个方法。当然你也可以实现自己的两个访问器
public delegate void delegate1(); //定义事件关联的委托
private delegate1 var; //事件操作的私有委托变量
public override event delegate1 event1 //自定义事件,只是在下面加了{}里面由自定义的add和remove访问器,事件必须是public这样才能被订阅
{
add //+=方法
{
var = value; /*内部调用似有委托变量bk进行操作,这里用传过来的 value值进行赋值,我们这里更改了默认的模式
把bk+=value换成了 bk=value,这样无论给事件赋值多少个,只能存储最后一个*/
}
remove//-=方法
{
var = value;
}
}
为何封装:
使用event关键字就可以保证对事件得操作仅限于+=和-=,为了保证只能在定义事件的类内部引发(使用)事件。使用对象.事件(参数)引发事件将产生错误
事件的使用:
1,因为事件只能在被声明的对象内部引发,而且事件体现的是对象内部发生变化(经过一些列判断)而产生的通知,所以我们要为事件提供一个protect的引发器用于对象执行一个公共方法并满足一定条件的时候引发事件而不是直接引发事件,所以要用protect修饰事件引发器。而且子类也可以实现自己的逻辑判断并通过调用这个引发器引发这个事件。
2,如果子类重写了父类的事件(前提是父类事件可以被重写),那子类需要提供自己的事件引发器。
2,事件需要关联一个实例/静态方法名,后面不加().如果是实例方法,需要提供(对象实例的变量名.方法名)或者(this.方法名)。如果是静态方法,直接提供(类名.方法名)。实例事件只能被类的一个实例引发,静态事件可以被所有类所有实例引发。
如何封装:(事件的声明)
首先,通过加入event关键字,在编译的时候编译器会自动针对事件生成一个私有的字段(与此事件相关的委托变量),用于调用方法,以及两个访问器方法,即add访问器方法,对事件使用+=操作时就是调用的这个方法。以及remove访问器方法,对事件使用-=操作时就是调用的这个方法。当然你也可以实现自己的两个访问器
public delegate void delegate1(); //定义事件关联的委托
private delegate1 var; //事件操作的私有委托变量
public override event delegate1 event1 //自定义事件,只是在下面加了{}里面由自定义的add和remove访问器,事件必须是public这样才能被订阅
{
add //+=方法
{
var = value; /*内部调用似有委托变量bk进行操作,这里用传过来的 value值进行赋值,我们这里更改了默认的模式
把bk+=value换成了 bk=value,这样无论给事件赋值多少个,只能存储最后一个*/
}
remove//-=方法
{
var = value;
}
}
为何封装:
使用event关键字就可以保证对事件得操作仅限于+=和-=,为了保证只能在定义事件的类内部引发(使用)事件。使用对象.事件(参数)引发事件将产生错误
事件的使用:
1,因为事件只能在被声明的对象内部引发,而且事件体现的是对象内部发生变化(经过一些列判断)而产生的通知,所以我们要为事件提供一个protect的引发器用于对象执行一个公共方法并满足一定条件的时候引发事件而不是直接引发事件,所以要用protect修饰事件引发器。而且子类也可以实现自己的逻辑判断并通过调用这个引发器引发这个事件。
2,如果子类重写了父类的事件(前提是父类事件可以被重写),那子类需要提供自己的事件引发器。
2,事件需要关联一个实例/静态方法名,后面不加().如果是实例方法,需要提供(对象实例的变量名.方法名)或者(this.方法名)。如果是静态方法,直接提供(类名.方法名)。实例事件只能被类的一个实例引发,静态事件可以被所有类所有实例引发。
浙公网安备 33010602011771号