国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 17:55:48
字體:
來源:轉載
供稿:網友

今天一朋友問我在程序中怎么實現事件。于是我總結了哈發出來。要明白事件,首先要知道什么是委托。在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);
}
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵武市| 叶城县| 大足县| 百色市| 彩票| 体育| 教育| 玉屏| 长汀县| 乌鲁木齐市| 来凤县| 武胜县| 科技| 伊宁市| 西乌| 内丘县| 祥云县| 汶川县| 吴堡县| 平潭县| 乌兰察布市| 尼勒克县| 莲花县| 宁化县| 瓦房店市| 凤阳县| 登封市| 岢岚县| 安仁县| 鹰潭市| 金堂县| 沙河市| 博罗县| 汤原县| 河北区| 南京市| 积石山| 津南区| 那坡县| 丰县| 苍梧县|