例如,我有一个实现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
补充说:不可能跨类别分享变量.您应该实现属性(与函数相同).
在C#中,我知道我可以通过在类的主体中指定它来重载类的构造函数:
public class MyClass()
{
public MyClass(String s) { ... }
}
Run Code Online (Sandbox Code Playgroud)
这将覆盖默认构造函数(没有参数)并强制使用参数s初始化类.
我知道在VBA中我可以初始化我的类Private Sub Class_Initialize(),但我不知道是否有办法强制我的类用参数初始化.可以这样做吗?
我做了大量的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类写一个平等测试?" 当迪克回答时.
我在类模块中有一个集合.我想限制对此集合"可添加"的对象类型,即集合应该只接受一个给定类型的对象而不是其他任何东西.
有没有办法强制添加到集合中的对象类型?
据我所知,没有内置的方法来做到这一点.是溶液,然后让这个私人收藏,并建立包装函数的方法通常是集合访问,即Add,Remove,Item,和Count?
我有点讨厌必须编写3个不添加任何功能的包装函数,只是为了能够在Add方法中添加一些类型强制执行.但如果这是唯一的方法,那么这是唯一的方法.