1、事件簡單理解
可以理解為物件對外部情況作出相應的響應,如:使用者在ui中單擊自定義控制項時,該控制項會觸發click事件。
2、事件的工作方式
(1)首先,必須在類中宣告事件並確定將要使用的委託和引數
(2)其次必須定義在觸發事件時要呼叫的委託
(3)最後,必須設計事件引數類,該引數類的例項會將資訊傳遞給呼叫的方法
理解以上三點可以用這個例子:小孩子玩氣球(氣球類),氣球有最大容積當充氣超出容積會**(**事件),當小孩聽到**聲嚇哭了。
class program
}//建構函式
public balloon(int 最大容積)
//第二步:在類的內部,定義該類具有那個事件
//呼叫事件時,必須判斷事件是否為空
public event **eventhandler **event;//事件關鍵字+委託名+事件名
//充氣方法
public void 充氣(int 充氣體積)
}}
}public class 小孩
//第五步:實現事件發生時要呼叫的方法(通俗的說事件觸發時候該做什麼)
void _ball_**event()
public void 打氣(int m)
public void 聽到氣球**()
}static void main(string args)
}通過以上可總結出:使用事件的一般步驟(以上例為例子):
第一步:定義處理事件的委託,也即事件的處理程式;
如:public delegate void **eventhandler();
第二步:在類的內部定義事件,指定事件處理的委託型別,也即定義事件
如: public event **eventhandler **event;//事件關鍵字+委託名+事件名
第三步:在類內部在適當的時候觸發事件,通俗的說是呼叫事件,類似於呼叫委託;
如:if (this._當前容積》this.最大容積)
}第四步:再類的外部(也可以在內部)註冊類的事件處理程式。
//註冊:事件源名+=new 時間委託型別(事件處理方法);
this._ball.**event += new **eventhandler(this.聽到氣球**);
this._ball.**event += new **eventhandler(_ball_**event);
第五步:實現事件觸發時要處理的方法,如this.聽到氣球**()和_ball_**event();
3、 簡單的事件原理我們應該通過上面的例子明白了,下面我們深入了解下:(簡單介紹小時間引數類eventargs)
加入我們還以上例子為標準,我們提出這樣乙個需求:小孩子嚇哭的同時想知道**的時間?該如何解決?
其實很簡單,只需在註冊事件委託時候加入乙個需要的引數即可,改動的地方如下:
public delegate void **eventhandler(datetime dt);
void _ball_**event(datetime dt)
public void 打氣(int m)
public void 聽到氣球**(datetime dt)
",dt);
}顯然這個問題解決了,那麼加入又增加了需求,不僅要知道氣球**的時間還想知道,**的地點等,那麼我們還需繼續改動,若以後有更多的引數,我們就得不斷地改動很多地方,豈不是很累?那麼該怎麼辦呢?很顯然,利用物件導向的思想,把委託的引數抽象成乙個類,即可解決,也即形成了所謂的事件引數類。
//事件引數類
public class ballooneventargs
set
}private string address;
public string address
set
}public ballooneventargs(datetime dt1, string add)
}這樣以後如果再有什麼引數要加入,直接修改類裡面的字段即可,不必修改每個委託引數和方法。完整**如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
}//建構函式
public balloon(int 最大容積)
public event **eventhandler **event;
public void 充氣(int 充氣體積)}}
}public class 小孩
void _ball_**event(ballooneventargs e)
public void 打氣(int m)
public void 聽到氣球**(ballooneventargs e)
,**地點是:",e.dt,e.address);}}
public class ballooneventargs
set
}private string address;
public string address
set
}public ballooneventargs(datetime dt1, string add)
}static void main(string args)}}
總結 瑣碎的日子
總是這樣,來一股寒流,天氣就冷的厲害,何況這次來的是股強寒流。天氣預報說大前天晚上寒流就到這兒的,所以前天就穿的暖暖的了,竟不冷。遲到的寒流於昨天到達。刮冰涼的北風,後來便下雨,再後來下雨夾雪。給媽媽打 媽說家裡在下很大的雪。給弟弟 弟弟說他還穿著短袖t恤。真是 兩重天。天氣預報說今天的溫度是 2 ...
C 事件驅動基礎
事件 事件是物件傳送的訊息,以發訊號通知操作的發生。事件可以由使用者互動引起,例如單擊按鈕,也可能是由某些其他程式的邏輯引發,例如更改的屬性值。引發事件的物件稱為event sender 事件傳送方不知道哪個物件或方法將接收到 處理 它引發的事件。事件通常是事件傳送方,例如click事件是butto...
C 基礎 事件(四)
事件定義的時候,可以使用add和remove關鍵字來自定義事件處理函式的新增與移除功能。例如,可以在新增和移除之前,使用lock關鍵字實現執行緒同步。雖然methodimplattribute會用當前類的物件作為同步物件實現執行緒同步,但當物件需要向外界公布多個事件的時候,這樣做會產生效率問題。比如...