相关疑难解决方法(0)

VBA继承,超级模拟

例如,我有一个实现B类的A类

--- A级----

implements B
public sub B_do()
end sub
Run Code Online (Sandbox Code Playgroud)

- 班B ----

public sub do()
end sub
Run Code Online (Sandbox Code Playgroud)

如何从A调用do()?(super.do())那么,我如何为这两个类定义一些公共变量?现在我只能继承函数,子和属性......

补充:同一个问题http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/5a83d794-3da1-466a-83d3-5d2eb0a054b2

补充说:不可能跨类别分享变量.您应该实现属性(与函数相同).

excel inheritance vba excel-vba

16
推荐指数
2
解决办法
3万
查看次数

有没有办法在VBA中重载类的构造函数/初始化过程?

在C#中,我知道我可以通过在类的主体中指定它来重载类的构造函数:

public class MyClass()
{
    public MyClass(String s) { ... }
}
Run Code Online (Sandbox Code Playgroud)

这将覆盖默认构造函数(没有参数)并强制使用参数s初始化类.

我知道在VBA中我可以初始化我的类Private Sub Class_Initialize(),但我不知道是否有办法强制我的类用参数初始化.可以这样做吗?

c# oop excel ms-access vba

7
推荐指数
2
解决办法
4603
查看次数

有没有办法为私有成员编写VBA类的相等测试而不暴露这些私有成员存在的知识?

我做了大量的Excel VBA编程,但不是很多面向对象的.这是偶然出现的东西,这让我感到困扰,我想知道是否有一些我缺少的东西.

在VBA中,假设我有一个C类定义了一些私有成员,如下所示:

'...

Private hidden1_ As Double
Private hidden2_ As Double

'...
Run Code Online (Sandbox Code Playgroud)

如果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
Run Code Online (Sandbox Code Playgroud)

当然,这不会在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
Run Code Online (Sandbox Code Playgroud)

它很麻烦,它暴露了私有类成员存在的知识,但至少它避免实际暴露私有类成员的价值.

这是我能做的最好的吗?

编辑:

像往常一样,在回答之后,我意识到了一个更好的方式来表达这个问题.它的标题是"有没有更简洁的方法为私人成员的VBA类写一个平等测试?" 当迪克回答时.

oop vba encapsulation private-members

5
推荐指数
1
解决办法
1036
查看次数

限制类模块中Collection的类型

我在类模块中有一个集合.我想限制对此集合"可添加"的对象类型,即集合应该只接受一个给定类型的对象而不是其他任何东西.

有没有办法强制添加到集合中的对象类型?

据我所知,没有内置的方法来做到这一点.是溶液,然后让这个私人收藏,并建立包装函数的方法通常是集合访问,即Add,Remove,Item,和Count

我有点讨厌必须编写3个不添加任何功能的包装函数,只是为了能够在Add方法中添加一些类型强制执行.但如果这是唯一的方法,那么这是唯一的方法.

collections vba types

5
推荐指数
2
解决办法
2756
查看次数