C#事件机制归纳(上)

原创 2004年07月15日 11:27:00

1.委派的实现过程。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

首先来看一下委派,委派其实就是方法的传递,并不定义方法的实现。事件其实就是标准化了的委派,为了事件处理过程特制的、稍微专业化一点的组播委派(多点委派)。下面举一个例子,我觉得把委派的例子和事件的例子比较,会比较容易理解。

using System;

 

class Class1

{

       delegate int MathOp(int i1,int i2);

       static void <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />Main(string[] args)

       {

               MathOp op1=new MathOp(Add);

               MathOp op2=new MathOp(Multiply);

               Console.WriteLine(op1(100,200));

              Console.WriteLine(op2(100,200));

               Console.ReadLine();

       }

       public static int Add(int i1,int i2)

       {

               return i1+i2;

       }

       public static int Multiply(int i1,int i2)

       {

              return i1*i2;

       }

}

 

首先代码定义了一个委托MathOp,其签名匹配与两个函数Add()Multiply()的签名(也就是其带的参数类型数量相同):

delegate int MathOp(int i1,int i2);

Main()中代码首先使用新的委托类型声明一个变量,并且初始化委托变量.注意,声明时的参数只要使用委托传递的函数的函数名,而不加括号:

MathOp op1=new MathOp(Add);

(或为MathOp op1=new MathOp(Multiply);)

委托传递的函数的函数体:

public static int Add(int i1,int i2)

{

       return i1+i2;

}

public static int Multiply(int i1,int i2)

{

      return i1*i2;

}

然后把委托变量看作是一个函数名,将参数传递给函数。 Console.WriteLine(op1(100,200));

Console.WriteLine(op2(100,200));

 

 

2.事件的实现过程

using System;

 

class Class1

{

       static void Main(string[] args)

       {

               Student s1=new Student();

               Student s2=new Student();

               s1.RegisterOK +=new Student.DelegateRegisterOkEvent(Student_RegisterOK);

               s2.RegisterOK +=new Student.DelegateRegisterOkEvent(Student_RegisterOK);

               s1.Register();

               s2.Register();

               Console.ReadLine();

       }

       static void Student_RegisterOK()

       {

              Console.WriteLine("Hello");

       }

}

 

class Student

{

       public delegate void DelegateRegisterOkEvent();

       public event DelegateRegisterOkEvent RegisterOK;

       public string Name;

       public void Register()

       {

               Console.WriteLine("Register Method");

              RegisterOK();

       }

}

Student类中,先声明了委托DelegateRegisterOkEvent(),然后使用event和要使用的委托类型(前面定义的DelegateRegisterOkEvent委托类型)声明事件RegisterOK(可以看作是委托的一个实例。):

public delegate void DelegateRegisterOkEvent();

public event DelegateRegisterOkEvent RegisterOK;

然后在Main()函数中,实例化Student类,然后s1.RegisterOK事件委托给了Student_RegisterOK 方法。通过“+=”(加等于)操作符非常容易地为.Net对象中的一个事件添加一个甚至多个响应方法;还可以通过非常简单的“-=”(减等于)操作符取消这些响应方法。

然后,当调用s1.Register()时,事件s1.RegisterOK发生。

C# 复习笔记 消息与事件处理

C# 复习笔记 消息与事件处理学习Windows编程后,有时候需要对系统消息或者事件做出自己的响应或者说自己拦截一些消息,实现某个事件或者函数的触发,这时就需要对系统消息进行处理. 大多数直接开始学...
  • baidu_31981559
  • baidu_31981559
  • 2016年05月30日 15:25
  • 1335

Lua中实现类似C#的事件机制

本文为 博客园 simonw 原创,转载请标明出处。 作者:simonw 原文:http://www.cnblogs.com/simonw/archive/2006/12/20/597986.ht...
  • kenkao
  • kenkao
  • 2013年08月20日 14:56
  • 3521

C#中的事件驱动机制如何理解!

原文:http://zhidao.baidu.com/question/50339292.html “事件驱动机制”里的事件和c#中的event不是一回事。就像java和c++里没有event这...
  • Joyhen
  • Joyhen
  • 2013年07月19日 10:28
  • 1982

C#.NET 消息机制

http://blog.csdn.net/fan158/article/details/6178392 一、消息概述       众人周知,window系统是一个消息驱动的系统, ...
  • conganguo
  • conganguo
  • 2016年05月23日 17:18
  • 464

Handler事件分发机制

Handler基础Handler事件分发相关类1.Message:消息对象,可通过Bundle存储数据及Runable存储业务逻辑。 Message的属性: long when; ...
  • BlogLaughFace
  • BlogLaughFace
  • 2016年04月29日 16:11
  • 610

Windows消息机制详解

文章转载自:http://www.cppblog.com/suiaiguo/archive/2009/07/18/90412.html,感谢原作者。 消息是指什么?      消息系统对于一个wi...
  • mfcing
  • mfcing
  • 2015年03月09日 15:35
  • 2947

深入理解C#委托及原理

一、委托 设想,如果我们写了一个厨师做菜方法用来做菜,里面有 拿菜、切菜、配菜、炒菜 四个环节,但编写此方法代码的人想让 配菜 这个环节让调用方法的人实现,换句话说,就是想在方法被调用时接收代码 作...
  • farmwang
  • farmwang
  • 2016年06月19日 09:17
  • 1563

基于MONO事件派发机制之SendMessage

前言,需要模块划分,那么脚本之间或者对象之间的事件传递是必不可少的。 目标:在之前的一篇文章,以装备面板的设计为例子,想设计结合PureMVC + MONO的一个共同使用,在考虑之前的一些设计想法...
  • dashuaifenyun1991
  • dashuaifenyun1991
  • 2015年01月27日 19:22
  • 732

c# Windows窗体与事件驱动

创建Windows应用程序基本步骤 打开Visual Studio软件 新建项目 项目类型:Visual C#项目 模板:Windows 应用程序 熟悉开发环境窗体的常用属性窗体的属性非常多, 以下...
  • qq_36482772
  • qq_36482772
  • 2017年05月23日 04:16
  • 349

C#的COM事件在C++中触发和响应的实现

在C++中调用C#开发COM组件时,一般的接口调用都比较容易实现,但是对于COM组件中的事件,C++中要去响应却不好实现。因为C#中事件是采用委托机制,而C++中却没有委托的机制,这样就无法实现对应。...
  • hu_jiangan
  • hu_jiangan
  • 2014年11月01日 20:50
  • 1390
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#事件机制归纳(上)
举报原因:
原因补充:

(最多只允许输入30个字)