我做了相当多的 Excel VBA 编程,但不是很多都是面向对象的。这是不时出现的东西,这让我很烦恼,我想知道我是否缺少一些东西。
在 VBA 中,假设我有一个 C 类,其中定义了一些私有成员,如下所示:
'...
Private hidden1_ As Double
Private hidden2_ As Double
'...
如果 VBA 像 C++ 或(大多数?)其他支持 OOP 的语言一样工作,我可以编写一个成员函数来在 C 类的实例之间进行相等性测试,如下所示:
'Error: won't compile!
Public Function equal(cinst As C) As Boolean
equal = (hidden1_ = cinst.hidden1_ And hidden2_ = cinst.hidden2_)
End Function
当然,这不会在 VBA 中编译,因为类成员函数只能访问调用它们的同一实例的私有类成员。我做过的最好的事情就是定义两个成员函数,如下所示:
Public Function equalDef(hidden1 As Double, hidden2 As Double) As Boolean
equalDef = (hidden1_ = hidden1 And hidden2_ = hidden2)
End Function
Public Function equal(cinst As C) As Boolean
equal = cinst.equalDef(hidden1_, hidden2_)
End Function
它很麻烦,并且暴露了私有类成员存在的知识,但至少它避免了实际暴露私有类成员的值。
这是我能做的最好的吗?
编辑:
像往常一样,在回答之后,我意识到了一种更好的方式来表达这个问题。它的标题是“是否有一种更简洁的方法可以为具有私有成员的 VBA 类编写相等测试?” 当迪克回答时。