关键字: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 语句中的代码,否则将交给操作系统进行更底层的消息处理。
如果没有回调函数,那么操作系统的事件则只能直接发送给应用程序中的每一个处理方法,如下图所示。
引入了回调函数后,处理的方法如下: