我正在试验VBA的接口,我有点生气.我在这个主题上阅读的大部分内容都建议使用Interfaces作为实现多态的手段,这似乎适用于我的一些用例.不幸的是,我遇到了一个问题.
我创建了一个类模块来定义我的界面 iCanvasObject
然后我创建了一个cTable实现所有方法的类iCanvasObject.到目前为止一切顺利,一切都按预期工作.
当我定义一个特定于cTable,而不是一部分的方法时,会出现问题iCanvasObject.即使它Public我似乎无法从一个变量访问它iCanvasObject,但实例化为cTable.
Dim tbl As iCanvasObject
Set tbl = New cTable
Run Code Online (Sandbox Code Playgroud)
它在我可以使用的IntelliSense中不可见,但是当我尝试直接调用该方法时,VBA会抱怨Method or data member not found错误.即使这个变量绝对是类型cTable
有没有办法让我创建特定于cTable我可以调用的方法,同时仍然利用接口的多态性优势?换句话说,如果我将变量标注为iCanvasObject,我是否严格限制在此界面中定义的是什么?
这就是多态性的工作方式.如果你声明它就是那样,iCanvasObject那么,它没有任何成员ctable不会来自iCanvasObject,除非你把它作为一个cTable.
这与您使用VBA的事实无关.