例如,我有一个实现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(),但我不知道是否有办法强制我的类用参数初始化.可以这样做吗?
对于我来说,这是一个关于学习面向对象方法的问题,因为它与VBA语法有关.假设我创建了几个类,如Car,Truck,Bus等.我创建了另一个类SpeedCalculator,我的车辆实例将实例化并包含.(作为一个新手,让我注意到这是一个很好的时间来宣布一个类是静态的而不是实例化它 - 哪个vba不能做我不认为.......)现在这个速度计算器将是没有简单的车速表.相反,它将根据温度,风速,RPM等计算速度 - 请与此一起,仅为了示例.
现在问题是所包含的对象如何收集其输入,这些输入仅在容器对象中可用(车辆对象可能实现接口(如果VBA甚至可以这样做......))."家长".是错的,我最终想通了,b/c parent-child是一个继承关系(VBA没有,再次),不是包含关系,包含对象的父是Excel应用程序(不是我的对象) .因此,如果有另一个关键字来引用容器属性,那似乎会很好.我希望我不会错过一些简单的事情.或者更多的情况是,这种引用会破坏面向对象的封装原则?
我想第二种方法是将容器传递给包含的,通过"Me"作为参数.但是你必须将所有包含的方法相乘,要么重载它们(如果VBA甚至可以这样做......),要么使用不同命名的版本 - 由于容器的类型不同(我们可以更理想化和避免声明为变体或"对象"?).
然后门#3将是最后一扇门,我猜?这将是一个(恼人的)一连串的争论.所有这些的定义往往会破坏我整洁的小计算器类的目的?
vba ×3
excel ×2
c# ×1
class ×1
containers ×1
excel-vba ×1
inheritance ×1
ms-access ×1
object ×1
oop ×1