【发布时间】:2018-07-17 19:07:46
【问题描述】:
在Windows API中创建控件对象(HWND)时,不允许直接访问控件对象的成员,只能通过特定函数访问,这是OOP的一个特点。
另外,Windows API 支持多态,例如我可以有以下功能:
void setHwndText(HWND hwnd)
{
SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)"Hello World");
}
上述函数可以改变多种对象的文本,而不仅仅是一种类型,例如它可以改变窗口的标题、编辑控件的文本和按钮控件的标题。
我不知道 Windows API 是否支持继承,但即使不支持,我认为 OOP 中继承的主要目的是允许多态性,正如我所展示的那样,Windows API 确实支持。
这是否意味着可以将 Windows API 视为面向对象的框架?
【问题讨论】:
-
Windows API 不是框架。这是一个 API。除此之外,您会看到许多用 C 实现的 OOP 范例。还有继承(例如,注册一个窗口类,将消息委托给基类实现
DefWindowProc)。不过,这个问题不太适合 Stack Overflow。 -
This 讨论这个话题。
-
@IInspectable 尽管在传统的面向对象框架中,您不会为每个实例注册一个函数指针来实现成员函数;您将声明一个假设的
class UrWindow的子类,它会覆盖虚拟成员回调函数。 -
Windows API 中也有很多 COM。 COM 立即支持封装、专业化和多态性。 @Davislor:你不能在 C 中这样做。在 C 中,注册函数指针是实现自定义行为的常用方法。
-
@IInspectable 早在 90 年代中期,当我在 Modula-2 中写作时,我会称之为“基于对象,但不是面向对象”。