程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#事件機制歸納(上)

C#事件機制歸納(上)

編輯:C#入門知識

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved