现在的位置: 首页 > 综合 > 正文

面向对象的委托和事件

2019年11月18日 ⁄ 综合 ⁄ 共 1004字 ⁄ 字号 评论关闭

 

 

事件可以用代码引发也可以是用户操作(键盘、鼠标)触发,如果把人的操作也看做是计算机程序的一部分,那他们就是一样的(实质他们都是执行相应的处理方法)。而委托只是可以在代码中触发,除非绑定到事件。其实这些都不重要,一般的时候委托和事件的代码都很好理解,只是当多线程的时候会有点麻烦。不过慢慢的也能屡顺了。

 

C#中的委托类似于C或C++中的函数指针。程序设计人员可以使用委托将方法的引用压缩到委托对象中,委托对象能被传递给调用该方法引用的代码而无须知道哪个方法将在编译时被调用。与C或C++中的指针不同的是,委托是面向对象的、类型安全的、受保护的。其实这里所谓的不同是在理解上的抽象上的,要是刨根问底不还是要到内存的地址也就是指针上?只是C#把它们封装了。不过用面向对象的观点更容易理解委托:

      委托是方法的抽象,它是和类同等级的,其实它就是特殊的类——委托类。它的实例可以拥有方法,但方法不是它是实例,有时候用指针更热容易理解(如果你知道指针的话):他是一个能纪录多个方法地址(指针)的变量,当你调用他并传适当的参数时它会把参数传到它拥有或者说注册了的方法那,从而使这些方法得到执行。

 

委托可以是方法的具体,跟方法开始执行的地方远离,不再一个类中、不在一个线程中。

 

用到委托的地方:

1.用于异步回调
2.多线程编程中使用委托来指定启动一个线程时调用的方法
3.C#中的事件模型。用他们指明处理给定事件的方法

 

事件总感觉太抽象了,用具体的文字难于定义,它是导火索,或者他就一行执行方法的代码带着它特定的参数,在某个特定的时刻,或者态度的情况下点火......后面的炸弹爆炸(也或许是哑弹)。事件独立存在的意义不打,只有后面有了炸弹(处理的方法)它才有用处。

 

事件是基于委托的,没有委托就没有事件(只有导火索没意义),委托是事件注册处理方法的唯一途径。

 

委托是类,事件是依附与某个委托类的特殊的委托实例的引用,当事件、委托没有跟具体的方法联系的时候他们只是一个null的对象,而什么时候在哪里实例化(绑定具体的方法),就看我们的需要了。

 

net事件模式

定义一个类型用于保存所有需要发送给事件通知接受者的附加信息(继承于System.EventArgs)
定义一个委托类型,用于指定事件触发时被调用的方法类型
定义一个事件成员
定义一个受保护的虚方法,负责通知事件的登记对象
定义一个方法,将输入转化为期望的事件

 

 

 

 

抱歉!评论已关闭.