我正在尝试为工程项目实现一些形状并将其抽象出来以用于一些常见功能,以便我可以使用通用程序.
我正在尝试做的是有一个调用的接口,cShape并拥有cRectangle并cCircle实现cShape
我的代码如下:
cShape 接口
Option Explicit
Public Function getArea()
End Function
Public Function getInertiaX()
End Function
Public Function getInertiaY()
End Function
Public Function toString()
End Function
Run Code Online (Sandbox Code Playgroud)
cRectangle 类
Option Explicit
Implements cShape
Public myLength As Double ''going to treat length as d
Public myWidth As Double ''going to treat width as b
Public Function getArea()
getArea = myLength * myWidth
End Function
Public Function getInertiaX()
getInertiaX = (myWidth) * (myLength ^ 3) …Run Code Online (Sandbox Code Playgroud) 我仍然试图围绕VBA中的接口和事件如何协同工作(如果有的话).我即将在Microsoft Access中构建一个大型应用程序,我希望尽可能灵活和可扩展.为此,我想利用MVC,接口(2)(3),自定义集合类,使用自定义集合类引发事件,找到更好的方法来集中和管理由窗体上的控件触发的事件,以及一些额外的VBA设计模式.
我预计这个项目会变得非常毛茸茸,所以我想尝试在VBA中一起使用接口和事件的限制和好处,因为它们是我认为在VBA中真正实现松散耦合的两种主要方式(我认为).
首先,有一个问题是在尝试在VBA中一起使用接口和事件时引发的错误.答案指出"显然不允许事件通过接口类传递到具体类中,就像你想使用'Implements'一样."
然后我在另一个论坛的答案中找到了这个陈述:"在VBA6中,我们只能引发在类的默认接口中声明的事件 - 我们不能引发在Implemented接口中声明的事件."
因为我还在寻找接口和事件(VBA是我真正有机会在现实环境中尝试OOP的第一种语言,我知道不寒而栗),我无法在脑海中彻底解决所有问题这意味着在VBA中一起使用事件和接口.听起来你可以同时使用它们,听起来有点像你不能.(例如,我不确定上面的"一个类的默认接口"与"一个已实现的接口"是什么意思.)
有人能给我一些基本的例子,说明在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
补充说:不可能跨类别分享变量.您应该实现属性(与函数相同).
我正在使用一个接口来确保一些类似的类实现一些强制方法(子/函数).
例:
C1和C2也需要完全相同的方法,例如方法SM1和SM2.
为了避免重复SM1和SM2,我想定义一个抽象类AC:
这将由C1和C2扩展
这个解决方案确实可以在Java中使用,但我找不到任何在VBA中执行相同操作的文档.(VB.Net似乎允许使用关键字MustInherit的抽象类.)
在VBA中是否可以确认?
有什么区别
Public Variable As Integer
Run Code Online (Sandbox Code Playgroud)
和
Private pVariable As Integer
Public Property Let Variable(ByVal lVariable As Integer)
pVariable = lVariable
End Property
Public Property Get Variable()
Variable = pVariable
End Property
Run Code Online (Sandbox Code Playgroud)
在VBA类模块中?
为什么我会使用第二个版本?
所以我尝试将这些问题作为指导:
这是我在单击表单上的控件时遇到的错误:
这是我的界面:
交易记录
Option Compare Database
Option Explicit
Public Property Get TRANSACTION_DATE() As Date
End Property
Run Code Online (Sandbox Code Playgroud)
这是我的课程:
账本记录
Option Compare Database
Option Explicit
Implements ITransactionRecord
'from interface
Private tTRANSACTION_DATE As Date
Private Property Get ITransactionRecord_TRANSACTION_DATE() As Date
ITransactionRecord_TRANSACTION_DATE = TRANSACTION_DATE
End Property
Public Property Get TRANSACTION_DATE() As Date
TRANSACTION_DATE = tTRANSACTION_DATE
End Property
Public Property Let TRANSACTION_DATE(ByVal newTRANSACTION_DATE As Date)
tTRANSACTION_DATE = CDate(Format((newTRANSACTION_DATE), "m / d / yyyy"))
End Property …Run Code Online (Sandbox Code Playgroud) vba ×6
interface ×4
excel ×3
excel-vba ×3
ms-access ×2
oop ×2
access-vba ×1
class ×1
inheritance ×1
properties ×1