程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 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