科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件C#事件机制归纳(上)

C#事件机制归纳(上)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

首先来看一下委派,委派其实就是方法的传递,并不定义方法的实现。事件其实就是标准化了的委派,为了事件处理过程特制的、稍微专业化一点的组播委派(多点委派)。

作者:changqi   来源:soft6 2008年5月16日

关键字: 机制 事件 C# Windows

  • 评论
  • 分享微博
  • 分享邮件

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发生。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章