handle句柄


若是你向我问起 Win32 程序设计中印象最深(最坑爹)的一个概念是什么,那么我会毫不犹豫地告诉你——句柄(Handles)。究其原因,无论是 MSDN 还是 维基百科,对于“句柄”这个词的解说都显得过于专业,完全是一副气势汹汹、不把初学者吓尿就不罢休的架势。

而这个概念恰恰是入门 Win32 程序设计所要逾越的第一座高山:文件的句柄(HANDLE)、窗口的句柄(HWND)、位图的句柄(HBITMAP)、设备上下文的句柄(HDC)、菜单的句柄(HMENU)、实例的句柄(HINSTANCE)……真可谓如影随形,无处不在。

设计哲学

我必须承认,用“哲学”这个字眼来当作标题是有些大了。其实用大白话来说,就是为什么要设计“句柄”这个东西,以及设计这东西到底有什么好处。

那么让我们把思绪带回到遥远的古代,先。

假设你带领一队拓荒者,你们的目标是在内陆的一个平原上建立你们的村子。现在的情况是,这个地方虽然物产丰饶,但周围并没有类似河流、湖泊这样直接可用的饮用淡水资源,那么你会怎么办?

——当然是打口井了。

好办法!但接下来的问题又来了:

这是一口 10 米深的井,你将如何解决饮水的问题?毕竟,下到井底直接喝水不仅费时费力,而且存在着一定的危险性。

这个问题的确稍显脑残,因为我们的祖先早已发明了一件神奇的辅助工具来解决这个问题。这件工具也就是为我们所熟知的辘轳,如下图。

这张图出自明人宋应星所著的《天工开物》一书,其中示意了辘轳的结构及其使用方法。好了,现在让我们从程序员的视角来做一些有趣的分析,也就是刚才提到过的所谓“设计哲学”——当然,是关于辘轳的。

  • 在整个打水的过程中,打水者并不需要关心整个水井的实现,也不需要关注辘轳运作的内部机制。在这个“黑箱”形成后,他唯一要做的只是转动手柄,仅此而已。
  • 由于借助了辘轳,取水者不必直接面对水井的底层——也就是深不可测的井水,这样大大降低了打水的危险系数。

定义

我相信,这么说应该能够让你理解辘轳上的那个手柄的意义了。鉴于英语中的手柄和句柄是同一个单词“handle”,那么我觉得“句柄”一词的定义也可以给出来了:

所谓句柄,就是指在某些情况下我们出于易用性和安全性的考虑,为了隐藏真正数据对象的实现而对其进行某种方式的绑定或映射后最终得到并使用的描述符。

猜你喜欢

转载自www.cnblogs.com/xfcode/p/11986946.html