c#中引入事件和委托的意义?

 我来答
奇热短篇故事
2010-12-16 · 超过17用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:41.7万
展开全部
相对于委托来说,接口可以声明多个方法,而且接口名称可以很好的表示这些方法的相关性;接口在同一时间只能引入一种实现,也就是说类Client中有接口IUser型的成员,UserA和UserB都实现了IUser,那么在Client中只能调用UserA或者UserB的方法,要想同时调用A和B的方法,需要创建两个IUser型成员。

相对于接口来说,委托类型只能“声明”一个方法;一个委托实例可以引入任意多个签名适合的方法,并且这些方法的顺序由委托实例所在类的外部决定,也就是说类A中有委托类型B的实例b(也可以是event),那么在Client1、Client2等多个类中都可以给A的实例a的成员b叠加方法,并且顺序由Client1、Clinet2决定。

从某种意义上可以这样理解:接口给一系列类定义了规范,是面向对象的,但同一时间只能代表其中一个类;委托给一系列方法定义了规范,同一时间可以代表这些方法的任意顺序组合。一个仅包含多个方法的接口,可以拆分成多个委托来代替,这样耦合度更低,但是失去了相关性,面向对象的特性也随之失去。一个类中的多个委托实例也可以改成一个接口来代替,但会失去委托可以叠加任意多方法的灵活性,并且如果多个委托是不相关的,会造成理解困难(接口名称就很难定)。

当接口只包含一个方法,委托只需叠加一个方法时,两者的作用是一样的。即使在这种场景下,我们也要明确,接口是针对类,委托是针对方法或某个地方发生了某件事,这样就自然会合理运用了。比如说FrameWork类库中,很多类实现了ICloneable接口,很多控件有OnClick事件。

另外,业务层需要调用表现层的方法时,往往通过提供事件和表现层交互,多线程时还要用Invoke方式调用这个事件。如果业务层提供一个接口让Form实现,总觉得怪怪的,但是微软MVP模式的一种实现方法就是这样的,在P中定义接口让V(WebForm)实现,除了代码重用度提高外,和通常的WebForm做法还是一样的,和MVC有本质区别。
sgz_1990
2010-12-16 · TA获得超过475个赞
知道小有建树答主
回答量:508
采纳率:0%
帮助的人:187万
展开全部
事件 就是发生的一瞬间的~比如 当你点击了 按钮 想实现其功能 这个过程 就是触发了这个按钮的单击事件
委托 就是相当于C语言 C++ 中的指针 不过他是安全的 不像C语言中 那么自由
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zcmzsxy
2010-12-16 · TA获得超过3897个赞
知道小有建树答主
回答量:544
采纳率:0%
帮助的人:238万
展开全部
定义一个委托的过程类似方法的定义,但它没有方法体。定义委托一定要添加关键字delegate。由于定义委托实际上相当一个类,因此可以在定义类的任何地方定义委托。另外,根据委托的可见性,也可以添加一般的访问修饰符,如public、private和protected。

委托的返回值类型为void,这并非表示委托类型本身带有返回值,该返回值类型是指委托的目标函数类型,即它委托的一个事件处理函数返回值是void类型。
两个需要存在调用关系的类型,在各自的实现中却没有编写实际的调用代码,它们只是通过一个事件和一个第三方的委托类型完成了消息的传递过程。两个类型之间不存在任何的紧密耦合,它们看似松散地通过一个委托对象中通信,实现了 “高聚合”和“低耦合”观点。
事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。

在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework 定义了一个特殊的类型(Delegate),该类型提供函数指针的功能。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿银故事
2010-12-16 · 超过49用户采纳过TA的回答
知道小有建树答主
回答量:152
采纳率:100%
帮助的人:86.4万
展开全部
简单的说,委托就是将方法作为方法的参数。事件和委托的意义我觉得可以通过observer模式学习。我推荐个很短的文档你学习下:http://wenku.baidu.com/view/8034a74d2b160b4e767fcf6e.html
在最后有讲到observer模式。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yue1314zhupo
2010-12-16 · 超过24用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:0
展开全部
委托是把方法可以作为一种参数传递,而事件是一种特殊的委托。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cqdfa38
2010-12-16 · TA获得超过1696个赞
知道小有建树答主
回答量:1410
采纳率:0%
帮助的人:843万
展开全部
C#(读作C sharp,一定不要读作夏普哦,哈哈)是微软为.net量身定做的语言,是目前最完善的面向对象托管代码语言之一。
C#和C以及C++没有关系,因为C#是托管语言(即必须运行在.net的CLR之上),与其他两者有本质区别。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式