【问题标题】:List of Available OOP Concepts可用的 OOP 概念列表
【发布时间】:2010-06-29 11:07:32
【问题描述】:

我正在为 VBA 中的 OOP(面向对象编程)构建一些材料。 谁能列出 VBA 中可用的 OOP 概念吗?

例如,从我的阅读中我发现:

  1. 继承在 VBA 中不可用。
  2. 封装概念已经存在,因为您可以使用访问修饰符“private”并构建公共属性。

【问题讨论】:

    标签: oop vba excel


    【解决方案1】:

    VBA 支持一些 OO 概念,但不支持其他概念。

    使用 VBA,您可以创建自己的类,并且可以从这些类创建对象。但是,VBA 不支持继承,也不真正支持在 C++ 或 .NET 等 OO 语言中使用的术语的经典含义中的“多态性”。

    VBA 类确实支持封装和抽象。

    【讨论】:

      【解决方案2】:

      以下是我在 VBA 中使用 OOP 概念时的一些观察:

      • 您不能在 VBA 中重载方法。但是,无论好坏,您的一次性用品中都有可选参数。
      • 您有一个无参数的Class_Initialize 方法,该方法在对象实例化时被调用,但不能重载以处理参数。如果你想在没有设置某些属性的情况下强制你的类不能“完全正常运行”,你必须编写自己的方法来做到这一点。
      • VB6 和 VBA 编辑环境强制您构建“类文件”并将每个类保存在与模块不同的单独文件中。
      • 类和模块都可以有公共和私有字段。模块中的公共字段本质上是一个全局变量。
      • 模块在功能上类似于 C# 中的静态类。可以从应用程序中任何位置的模块调用公共代码。

      VB6/VBA 范例将类设想为封装对象功能和属性的一种方式。从这个意义上说,VB6/VBA 的对象与任何其他基本 OOP 环境一样存在,应在适当的情况下鼓励使用和设计它们。

      但是,缺少几个关键的 OOP 特性导致 VB6/VBA 无法彻底实现完整的 OOP 设计模式。

      【讨论】:

      • VBA 确实支持接口,一个名为 IFoo 的抽象类可以在任意数量的其他类中使用Implements IFoo 实现,所有这些都可以作为 IFoos 传递。
      • @Alex 没错。我忘记了 VB6 中的接口,因为如果我记得的话,它们的使用仍然非常有限。
      【解决方案3】:

      VBA 的一个特殊缺点是对象数组的封装。

      您可以拥有对象数组,但不能向下多于一层。 存在变通方法,例如通过使用 Variant 类型,但您会失去类型安全性。 这使得使用分层对象结构变得很麻烦,而您最终可能会得到令人费解的代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多