程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 關於c#中的事件處理機制

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

編輯:關於C語言
今天一朋友問我在程序中怎麼實現事件。於是我總結了哈發出來。要明白事件,首先要知道什麼是委托。在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);
}
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved