// 研究控制項點選事件的真實原理
// 這裡定義了乙個控制項,編譯後,將這個控制項放到窗體上,找到myclick事件,自己加點**就可以測試
using system;
using system.collections.generic;
using system.text;
using system.componentmodel;
using system.windows.forms;
#region " 字 段 聲 明 "
eventhandlerlist _myevents;
object _eventclick = new object();
#endregion
#region " 屬 性 定 義 "
public eventhandlerlist myevents
return this._myevents;}}
#endregion
#region " 事 件 定 義 "
public event eventhandler myclick
remove
//asynccallback
//activator
}#endregion
#region " 私 有 方 法 "
private void myonclick(eventargs e)
}private void wmmouseup(ref message m, system.windows.forms.mousebuttons button, int clicks)
private int signedloword(intptr n)
private int signedhiword(intptr n)
#endregion
#region " 公 有 方 法 "
protected override void wndproc(ref message m)
}#endregion
// mybutton.myclick的真實處理情況是這樣的:
// 首先,向外公布乙個myclick方法變數,對這個變數的操作支援add和remove操作.
// 當add操作時(也就是從外邊作+=操作時),將傳入值寫入乙個列表,起個名字叫做事件列表.
// 在mybutton內部的訊息處理過程wndproc中,當截獲到wm_lbuttonup訊息時,呼叫wmmouseup方法處理.
// 在wmmouseup實體中呼叫myonclick方法.
// 在myonclick實體中,從事件列表中取到方法例項handler並呼叫方法.
// mybutton.myclick的工作原理與例4所描述的不同
// 1.方法變數myclick沒有直接用來存放外部的方法例項,而是象屬性那樣,存放在乙個欄位_myevents中.
// 2.訊息處理過程wndproc也沒有myclick的呼叫,而是在myonclick中呼叫方法欄位.
// 從本質上講wndproc還是處理了myclick的,但實現思路上區別很大.
// 好像少了乙個環節,myclick在內部沒例項化過.myonclick中進行了方法字段是否為空的判斷.
// 這說明方法變數在內部不一定需要傳入例項,只要內部呼叫時進行非空判斷就可以了.
// 以上研究都是把方法變數當做一般變數來處理.
// delegate與訊息迴圈結合,這就是我們看到的事件.
// 事件帶來的效果,實現了乙個物件將自己的方法公布給別人,並由別人進一步完善這個方法.
// 這又繞回到最開始舉的例子:領導委託下屬做某件事!
// 最初的例子委託用錯了地方,把下屬的方法定義了乙個變數來呼叫.
// 應該是把領導這個物件內定義乙個方法變數,由下屬具體實現.
// 下一例重構最初的例子.
}
委託和事件再探索
一直以為張子陽是位功力深厚的長者,今天才知道他比 我大一歲!功力深厚也就罷了,還長得那麼帥!汗顏!張老師 在技術上不分輩分 的文章我一直關注,由淺及深,能跟著學不少東西非常棒!我看技術從來不做筆記的,以為自己腦子好使,最近 發現老是忘事,看來到了該做筆記的年齡了!具體的關於c 中的委託和事件我就不再...
C 物件模型簡介(二) 深入底層,探索本質
叄 多重繼承 注意 在多重繼承下,若有n個基類,則派生類中有n個virtual table.針對每乙個virtual table,派生類物件中有對應的vptr。這些vptrs將在建構函式中被設立初值。派生類的虛函式會覆蓋 改寫 其每個基類virtualtable中相應的虛函式索引值。多重繼承最左端的...
C 中的委託和事件 五
委託 事件與observer設計模式 範例說明 上面的例子已不足以再進行下面的講解了,我們來看乙個新的範例,因為之前已經介紹了很多的內容,所以本節的進度會稍微快一些 假設我們有個高檔的熱水器,我們給它通上電,當水溫超過95度的時候 1 揚聲器會開始發出語音,告訴你水的溫度 2 液晶屏也會改變水溫的顯...