關於c#中的事件處理機制

來源:互聯網
上載者:User

在程式中怎麼實現事件。要明白事件,首先要知道什麼是委託。在C#中委託允許開發人員
將一個對象中的方法傳遞給另一個能調用該方法的類的某個對象。比如:可以將類AC中的一個方法ADD[前

提是這個方法以被包含在某個委託中了]傳遞給另一個類WMS。此時類WMS就能調用類AC中的ADD了。當然不

管你是以什麼方式實現方法的傳遞了,可以是靜態,也可以是執行個體化的。。要實現一個委託,需要按照

這樣的不揍:
A:申明委派物件。注意:參數一定要和你想要包含的方法的參數形式一致。
public delegate void NeweggDelegate(string values)
B:定義方法
class NeweggClass1{
 public viod NeweggMethod1(string values){}
public viod NeweggMethod2(string values){}
....}
 C:建立一個委派物件此時將這個方法包含在該委派物件中
class NeweggClass2{
public NeweggDelegate createDelegate()
{NeweggClass1 obj1=new NeweggClass1();
NeweggDelegate dele1=new NeweggDelegate(obj1.NeweggMethod1);
NeweggDelegate dele2=new NeweggDelegate(obj1.NeweggMethod2);
NeweggDelegate dele3=dele1+dele2;//屬於多點委託了
return dele3;
}
}
 D:再調用包含在委託中的方法。
class NeweggClass3
{
public void NeweggCallDelegate(NeweggDelegate de,string values)
{de(values);}
}
class test
{
static void Main(string[] args)
{
NeweggClass2 cls2=new NeweggClass2();
NeweggDelegate  delel=cls2.createDelegate();
NeweggClass3 cls3=new NeweggClass3();
cls3.NeweggCallDelegate(delel,"deleagte is used");
}
}
而事件是具有特定參數的委派物件而已。格式象:public delegate void NeweggEventHandler(object

sender,NeweggEventArgs e);
sender表示觸發該事件的對象,e表示在事件處理函數裡可以被使用的一些資料象NeweggEventArgs可以繼

承自EvenetArgs類。當然有的時候不需要派生自己的類想一些GUI的程式,裡面有很多縣城的事件使用如

:MouseEventArgs。否則必須從EventArgs類派生。
現在舉例如下:
using System;
//步驟1:聲明委派物件
public delegate void MyHandler1(object sender,MyEventArgs e);
public delegate void MyHandler2(object sender,MyEventArgs e);
//步驟2:建立事件處理函數的方法
class A{
public const string m_id="Class A";
public void OnHandler1(object sender,MyEventArgs e){
Console.WriteLine("I am in OnHandler1 and MyEventArgs is {0}",
e.m_id);
}
public void OnHandler2(object sender,MyEventArgs e){
Console.WriteLine("I am in OnHandler2 and MyEventArgs is {0}",
e.m_id);
}
//步驟3:建立委派物件,並事件處理函數包含在其中同時設定好將要觸發事件的對象
public A(B b){
MyHandler1 d1=new MyHandler1(OnHandler1);
MyHandler2 d2=new MyHandler2(OnHandler2);
b.Event1 +=d1;
b.Event2 +=d2;
}
}
//步驟4:通過委派物件(也就是觸發事件)來調用被包含的方法
class B{
public event MyHandler1 Event1;
public event MyHandler2 Event2;
public void FireEvent1(MyEventArgs e){
if(Event1 != null){
Event1(this,e);
}
}
public void FireEvent2(MyEventArgs e){
if(Event2 != null){
Event2(this,e);
}
}
}
public class MyEventArgs EventArgs{
public string m_id;
}
public class Driver{
public static void Main(){
B b= new B();
A a= new A(b);
MyEventArgs e1=new MyEventArgs();
MyEventArgs e2=new MyEventArgs();
e1.m_id ="Event args for event 1";
e2.m_id ="Event args for event 2";
b.FireEvent1(e1);
b.FireEvent2(e2);
}
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.