【问题标题】:Memento Implementation in VBAVBA 中的备忘录实现
【发布时间】:2011-01-06 13:59:48
【问题描述】:

我正在寻找备忘录模式 (GoF) 的 VBA 实现。我正在考虑转换 Java 版本 from Wikipedia。它将用于 Excel 加载项的撤消/重做功能。

具体来说,我的线路有困难:

return new Memento(state);

或者,为了更具体,有人可以用 VBA 重写这个:

public Memento saveToMemento() {
    //System.out.println("Originator: Saving to Memento.");
    return new Memento(state);
}

我试图转换的整个代码都可以在上面的维基百科链接中找到。

谢谢

【问题讨论】:

  • 您能否更具体地说明您的问题到底是什么?使用return 关键字? new 运算符的使用?
  • Dirk,我已经重写了问题并包含了新信息,所以希望现在您能理解我的问题所在。

标签: java .net vba design-patterns memento


【解决方案1】:

Java 中的 return 关键字与 VBA 中的 return 关键字非常不同。在 VBA 中,returngosub 配对,以改变过程中的执行流程。

在 Java 中,return 表示“从函数退出”,要么返回适当类型的值(如您的示例所示),要么不返回任何值(在 void 函数的情况下 - Java 等效于 Sub在 VBA 中)。

在您的示例中,它将返回Memento 类型的对象。这必须是函数的返回类型或该返回类型的子类型。通过使用new 关键字(类似于VBA 中的new 关键字)创建一个新对象。名为state 的对象作为参数传递给新对象的构造函数。

在 VBA 中你可以这样写:

Function saveToMemento(state As String) As Variant

saveToMemento = createMemento(state)

End Function

createMemento 是您编写的一个函数,用于创建适当的结构来保存纪念品信息

【讨论】:

  • barrowc,如何创建新对象的构造函数(作为参数),或者更具体地说,如何编写 createMemento 函数以模拟 saveToMemento 的 Java 代码?
  • 您可以在 VBA 中定义类,然后创建这些类的对象。 VBA 没有这样的构造函数,但您可以使用Class_Initialize() 来初始化对象。不幸的是,您不能将参数传递给Sub,因此您必须调用单独的Sub 来处理设置初始状态。你可能会从msdn.microsoft.com/en-us/library/aa227509%28VS.60%29.aspx得到一些想法
  • 谢谢,你的回答很有用。
猜你喜欢
  • 2018-02-02
  • 1970-01-01
  • 2012-02-18
  • 2023-03-31
  • 2010-10-27
  • 2013-12-01
  • 2023-01-17
  • 1970-01-01
  • 2021-08-05
相关资源
最近更新 更多