`
yanghuidang
  • 浏览: 967859 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C# 事件与委托

 
阅读更多

其实C#的事件与委托在日常开发过程中不用也能解决问题,但是用于不用是不同的;更能体现出对象的高内聚、低耦合,两个对象要想互操作,对外提供接口;甚至是让另一个对象来处理本对象在发生指定事件的时候的操作;打个比方,我把自己比喻成一个对象,把饭店老板比喻成另一个对象;这两个对象是完全独立的,我并不知道我要到哪家饭店吃饭,而同样饭店老板也不知道谁会来吃饭;如果不存在事件,我到了一家饭店,我跟老板讲我要吃饭,老板不回话,我说我要吃白菜.....等等;都是我自己在操作过程,这样太死板了,我不知道这家饭店是否有我点的菜没有回馈信息;正常的吃饭应该是我到饭店了,老板自己触发了一个事件,事件是他看到有顾客来吃饭了,主动来问我几个人吃饭,吃些什么;而不是我来到一个“真空”饭店;事件是一种传递信息的过程,C#本身是一种面向对象语言,我们要以大自然的规律来思考编程的问题;如果不用事件的话也能实现上述讲的吃饭的问题,这样即繁琐也麻烦不符合面向对象的思想,你来到饭店,然后调用老板的方法:

public bool 吃饭(菜名,数量);//老板提供的方法

if(老板.吃饭(牛肉,10)){这家有牛肉;}//我调用老板的吃饭方法,确定是否有我要的菜;

这样的话,不管谁来吃饭你都要提供一种方法,来供外部调用;每个人都吃饭习惯,点菜习惯不同对数量的理解更是不能很透彻的明白,这样就产生了一个问题,互动性很差,没有沟通,没有回应;如果有了事件,显然就变的更人性化一点,对外不需要考虑太多,本店的特色定义成过程事件,特色的步骤必须是这样的,将本饭店的特色定义成一个个的过程事件,顾客来了按照这样的一个事件流程执行,就很准确的知道顾客要吃些什么,事件是一个很好的互相沟通渠道;来人了先问吃什么口味,这是一个事件如果客户说我不吃就不操作这个事件,老板的事件参数也没有接收到任何客户输入的信息;下面我就以吃饭为例子讲解对象的事件;

public class 老板

{

public delegate void 看见有顾客来了(string 问好);事件的委托,后面讲到;

public Event 看见有顾客来了 顾客来吃饭;//顾客来了吃饭,这是一个事件;

public void On顾客来吃饭(string info);//引发事件的方法;

}

public class 顾客

{

老板 laoban=new 老板();

laoban.顾客来吃饭+=new 看见有顾客来了(处理老板事件);

public void 处理老板事件(string 问好)

{

Messagebox.show("您好,有牛肉吗?");
}

laoban.On顾客来吃饭("您好请问吃些什么");//这个方法也许在某个事件触发后调用的,一般不在订阅对象中触发;

}

我简单的实现订阅老板的事件,然后老板问好吃什么,我回馈有牛肉吗,这是比喻而已也许有点不恰当;下面深入理解委托与事件的关系;

委托字面理解就是帮忙做事的,中间方的意思,在代码中的意思就是说,用委托来关联方法与事件的;当触发事件了,通过委托链来一个一个调用绑定在委托链上的所有实体方法,委托链:

看过数据结构的同志都知道链表的结构,每一个数据域都是存放调用着的方法如:

laoban.顾客来吃饭+=new 看见有顾客来了(处理老板事件1);//这样就是将一个方法绑定到委托链的一个数据域中了;

laoban.顾客来吃饭+=new 看见有顾客来了(处理老板事件2);//可以连续绑定多个方法到一个委托链上,实现多播委托;

在上述这幅图中,绑定了四个方法到委托链上,当调用委托链的方法时,委托链会按照当初绑定的顺序调用委托链上的方法,先调用

“处理老板事件1方法”,“然后调用处理老板事件2”;委托链的调用参数是向下传递的,就是在调用第一个方法得出的结果会继续向下传递到第二个方法,如果在方法执行的过程中没有对出入的参数进行修改,参数就不会受到影响,这是针对引用类型而言的;

事件字面理解就是会被触发的动作过程,比如人,你跟我说一句话我耳朵就接收到了,然后我内部进行处理,确定触发什么事件;委托是委托事件是事件,两者是没有关系的,只不过事件利用委托的特点来帮忙处理一下事件的方法而已;在我们使用委托的时候要先确定这个委托的类型,什么叫类型就是确定代码的物理结构,定义委托:

delegate void delegatename();//delegate是委托的关键字,delegatename是委托的名称,定义委托的类型就是确定委托链中的数据域存放的数据结构类型,在我们学习数据结构的时候要先定义没一个节点的数据类型,道理差不多;确定了类型之后就是具体的实例了:

Event delegatename Eventname;用事件关键字和委托类型定义事件实例,其实事件实例就是委托实例,每一个对象存在都有意义表面看来用委托一样能实现对方法的连续的调用,为什么还要事件呢,有些东西不是表面看起来那么简单的,事件的存在是关联物理结构的,当CLR执行委托和事件处理过程是不一样的;事件就事件;

事件与委托就讲到这里了,希望能帮助你进一步理解,上面都是本人自己的理解,如有错误的地方还请高人指点谢谢;

分享到:
评论

相关推荐

    C#事件与委托实例Demo源代码

    这里,我们主要关注"事件"和"委托"的实例演示,特别是通过"C#事件与委托实例Demo源代码"来深入理解这两个概念。 首先,我们需要了解什么是委托。在C#中,委托是一种类型,它类似于函数指针,可以引用方法。委托允许...

    c# 事件与委托的应用实例

    在C#编程语言中,事件和委托是两个非常重要的概念,它们在构建高效、响应式的应用程序时发挥着关键作用。事件通常用于实现对象间的通信,而委托则是一种类型安全的函数指针,允许我们将方法作为参数传递或者用作事件...

    C#事件与委托详解

    ### C#事件与委托详解 #### 一、委托(Delegate) **委托**是C#语言中一种非常重要的机制,用于封装方法的引用。通过委托,我们可以在程序运行时动态地调用方法,这对于构建灵活的应用程序至关重要。 ##### 委托的...

    C#事件与委托

    处理程序方法通常与事件委托的签名匹配: ```csharp void SomeMethod() { myObject.MyEvent += MyEventHandlerMethod; } private int MyEventHandlerMethod(int arg1, int arg2) { // 处理事件的逻辑 } ...

    C# 事件与委托 博客示例源码

    在C#编程语言中,事件和委托是两个非常重要的概念,它们构成了.NET Framework中的多线程编程和事件驱动编程的基础。本文将深入探讨这两个概念,以及如何在实际项目中运用它们。 首先,让我们来理解“委托”。在C#中...

    C#事件与委托讲解

    ### C#中的事件与委托详解 #### 一、引言 在C#编程语言中,事件与委托是非常重要的概念,尤其是在构建复杂的软件系统时。它们为程序员提供了强大的工具来处理对象之间的通信,使得代码更加模块化和易于维护。本文...

    C#事件与委托详细解说

    在C#编程语言中,事件(event)和委托(delegate)是两个核心概念,它们在构建事件驱动的程序中起到至关重要的作用。事件是对象间通信的一种方式,用于通知其他对象发生了特定的事情。委托则是C#中实现事件的关键,...

    C# 事件与委托 示例 适合初学者

    在C#编程语言中,事件和委托是两个非常重要的概念,尤其对于开发用户界面和响应式应用程序至关重要。本文将深入探讨这两个概念,并结合一个适合初学者的小游戏示例进行讲解。 首先,我们要理解什么是委托。在C#中,...

    C#事件和委托定义与使用(有两个很形象的例子)

    本文将深入探讨C#中的两个关键概念:事件和委托,并通过实例进行详细解析,帮助初学者更好地理解和运用。 首先,我们来了解什么是委托。在C#中,委托是一种类型,它代表了方法的引用,类似于函数指针。委托可以被视...

    C#事件和委托

    在C#编程语言中,委托(Delegates)和事件(Events)是两个极其重要的概念。委托是一种可以持有对具有特定参数列表和返回类型的方法的引用的对象类型,可以将方法作为参数传递给其他方法。事件是基于委托的一种特殊...

    C#面向对象:委托及事件.pdf

    **3.2 事件与委托的关系** 事件本质上就是基于委托的一种特殊应用。事件使用私有的委托字段来存储事件处理程序,并通过公共的add/remove访问器来控制对这些处理程序的访问。事件提供了一种安全的方式,允许对象之间...

    C#中的事件与委托详解 C#中的事件与委托详解

    ### C#中的事件与委托详解 #### 委托的本质与应用 在C#中,委托是一种引用类型的数据,它可以存储方法的引用。这使得在编程中能够将方法作为参数传递给其他方法,或者在运行时动态调用方法。这种特性在实现事件...

    C# Socket异步通信+事件与委托+通信程序与界面分离

    本教程主要探讨如何使用C#的Socket实现异步通信,并结合事件和委托来处理通信过程中的消息传递,以及如何将通信逻辑与用户界面(UI)分离,以实现更高效、更灵活的程序设计。 首先,让我们理解什么是Socket异步通信。...

    C#中委托与事件的区别

    委托(Delegate)和事件(Event)是C#中非常重要的两种机制,它们在.NET框架中扮演着极其重要的角色。理解这两种概念,对于深入学习C#编程语言,构建高效、可维护的程序架构至关重要。首先我们来探讨一下委托的概念...

    C#事件的委托,可以看看

    在C#编程语言中,事件和委托是两个非常重要的概念,它们在实现面向对象编程中的事件驱动模型中起到关键作用。本文将深入探讨这两个概念,并结合提供的代码片段进行解释。 首先,让我们理解什么是委托。委托在C#中...

    C#--委托和事件

    事件处理程序是一个方法,它通常被定义为与事件关联的方法。这个方法需要与定义的委托类型相匹配。例如: ```csharp private void OnEventName(object source, xxxEventArgs argName) { // 处理事件的代码 } ``` ...

    C#中事件委托订阅发布模式

    事件通常与委托一起使用,遵循一种称为订阅-发布模式的编程范式。在这种模式下,发布者类定义了一个事件,该事件由一个委托类型表示。同时,发布者还提供一个方法(通常是`add`和`remove`访问器)来允许其他对象订阅...

    C#委托 C#委托 C#委托

    委托与事件 委托在C#事件处理中扮演重要角色。事件本质上是私有的,只允许发布者(事件源)触发,而订阅者(事件处理程序)只能响应。委托在这里起到桥梁作用,连接事件源和处理程序。例如: ```csharp public ...

Global site tag (gtag.js) - Google Analytics