事件与委托:
使用委托变量,为什么使用事件属性(同字段与属性的区别)
外部使用委托时会出现的问题:
1 由于可能同一个方法可能会重复添加,但最后的添加不是+=而是写成了=,就表示只赋值了最后一个,
会出现委托链的问题 ,外部只能用+=为委托赋值。
2 有可能不通过事件方法而直接调用委托,只能通过底层的事件方法调用委托,外部不能调用委托。
综上:委托只能在内部调用,不能在外部调用,在外部赋值时只能用+=
属性中的只写属性正好满足要求。
故增加event关键字将其定义为类的委托类型的事件变量,(正如属性对字段的保护一样),这样,
就能利用事件(实质是属性,更实质是方法,也就是事件方法)保护委托,事件有两个方法add和remove方法,
分别通过+=和-=为私有变量委托添加和移除注册的方法,事件也是一个委托类型的变量,把事件当委托变量使用
事件概念:
事件就是一个特殊的委托类型的变量(前有event修饰),是一个私有的委托变量加上两个add和remove方法。公共的事件属性是对私有委托字段的封装,外部只能对事件通过+=和-=为委托字段添加和移除方法。就像以前学的属性对字段的封装一样。
委托和事件的区别:
事件是一个私有的委托变量,加上两个方法:add和remove方法,在外界通过+=和-=进行赋值操作
事件机制可以避免在其他无关方法中提供委托调用功能,造成委托盗用。
委托是类型,事件是委托类型的变量,
触发控件事件---系统自动调用底层的控件的事件方法---调用委托---执行方法。而我们现在在定义Form窗体类的时候,只需处理为控件添加事件,及事件注册方法。其他均为底层的东西,一般用不到。例如,需要重写事件的时候:
点三次触发事件:需要定义继承于事件类(如button类)的自定义控件类,定义类的public委托类型的事件属性, 重写onclick事件方法调用委托,
然后1 在外部类中定义方法,同过+=和-=为事件添加方法,从而注册事件(定义事件与方法并添加)。(自动生成:类名.事件名+=写出来后按下两次Tab键,系统自动生成)
2 在设计器中找到控件类的事件属性,双击,自动添加方法,并在designer中自动注册事件。