C 的基礎瑣碎總結 事件

2022-01-17 13:09:08 字數 2731 閱讀 4232

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會用當前類的物件作為同步物件實現執行緒同步,但當物件需要向外界公布多個事件的時候,這樣做會產生效率問題。比如...