關鍵字:oo 面向對象與其說是技術不如說是一種理念,各種面向對象語言或多或少有些差異,但是面向對象的理念卻是不變的。在面向對象的定義中并沒有委托這個概念,但是委托卻是目前的面向對象分析與設計及面向程序設計語言中的必含內容。
MSDN對委托的定義如下:The delegate keyword is used to declare a reference type that can be used to encapsulate a named or an anonymous method. Delegates are similar to function pointers in C++; however, delegates are type-safe and secure。對于這樣的定義,我們可以了解到委托是一種引用,就跟C++中的函數指針一樣,只是委托比指針更加安全,不會發生那種指向不正確的內存地址這樣的錯誤。
如果要從編程的角度來理解委托,確實可以更快一點,但是這樣很難理解委托的真正實質。既然有委托,那么就有“委托人”與“被委托”人,那么找出面向對象中的委托人和被委托人就成了理解委托的關鍵。被委托人是幫助委托人進行本來委托人該做的事情,就比如以前在DOS下編程,需要判斷鍵盤是否有某個健被按下,那么在程序中需要做一個循環,在循環內時刻對鍵盤掃描碼進行獲取并判斷,這種方式稱為輪詢。在WIN32編程中也有回調函數這樣一個特殊的函數進行系統消息的輪詢,一個典型的回調函數如下:
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_PAINT:
……
return 0;
case WM_DESTROY:
……
return 0;
default:
……
}
return -1;
}
一旦操作系統有消息發送過來,由回調函數進行處理,看是否有應用程序所需要的消息,如果有則執行相應case 語句中的代碼,否則將交給操作系統進行更底層的消息處理。
如果沒有回調函數,那么操作系統的事件則只能直接發送給應用程序中的每一個處理方法,如下圖所示。
引入了回調函數后,處理的方法如下:
文章來源于領測軟件測試網 http://www.kjueaiud.com/