动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   网页设计 → 阅读文章

 C#事件机制归纳(上)

作者:无从考证 来源:CSDN 
阅读 4059 人次 , 2006-2-15 14:35:00 

  1.委派的实现过程。
首先来看一下委派,委派其实就是方法的传递,并不定义方法的实现。事件其实就是标准化了的委派,为了事件处理过程特制的、稍微专业化一点的组播委派(多点委派)。下面举一个例子,我觉得把委派的例子和事件的例子比较,会比较容易理解。
using System;
 
class Class1
{
       delegate int MathOp(int i1,int i2);
       static void 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发生。   
 本文TagsC#  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:理解Java面向对象的程序设计思想
· 下一篇:C#事件机制归纳(下)
· 按形容词分类:可爱、快乐、有趣
· DW MX 设计留言本实战(2)
· JavaScript学习:基础继承机制(1)
· 不得不看的好东东《编程之道》
· 基本配色-终极配色手册


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077