【发布时间】:2017-04-22 18:18:45
【问题描述】:
我仍在尝试了解接口和事件如何在 VBA 中协同工作(如果有的话?)。我即将在 Microsoft Access 中构建一个大型应用程序,我希望使其尽可能灵活和可扩展。为此,我想利用MVC、Interfaces (2) (3)、Custom Collection Classes、Raising Events Using Custom Collection Classes,找到更好的方法来处理centralize 和manage 触发的事件通过表单上的控件,以及一些额外的VBA design patterns。
我预计这个项目会变得非常麻烦,所以我想尝试了解在 VBA 中同时使用接口和事件的限制和好处,因为它们是(我认为)真正实现松散耦合的两种主要方式在 VBA 中。
首先,有this question 关于尝试在 VBA 中一起使用接口和事件时引发的错误。答案是“显然不允许将事件通过接口类传递到具体类,就像你想使用'Implements'一样。”
然后我在answer on another forum 中找到了这条语句:“在 VBA6 中,我们只能引发在类的默认接口中声明的事件 - 我们不能引发在已实现接口中声明的事件。”
由于我仍在探索界面和事件(VBA 是我真正有机会在现实环境中尝试 OOP 的第一种语言,我知道 颤抖),我可以在我看来,这对于在 VBA 中一起使用事件和接口意味着什么,我并没有完全理解。听起来你可以同时使用它们,但听起来你不能。 (例如,我不确定上面的“类的默认接口”与“已实现的接口”是什么意思。)
谁能给我一些基本示例,说明在 VBA 中同时使用接口和事件的真正好处和限制?
【问题讨论】:
-
接口意味着B类的结构,从A类派生,必须继承A的功能等,而不是代码。因此,如果您的数据库中有员工,他们将是人类,因此您将拥有姓名、姓氏等属性,标准人类属性,但在员工类中您还需要员工编号,您将实现 clsHUMAN在 clsEMPLOYEE 中,但在 clsEMPLOYEE 中添加一个名为 strStaffID 的额外属性。在 clsEMPOYEE 中,您可以拥有类可以引发的事件,因此如果事件是 evtNAMECHANGE,我们可以在 EMPLOYEE 属性更改而不是 HUMAN 中执行此操作。
-
由此,EMPLOYEE 必须像 HUMAN 一样具有 Name、LastName,而且还具有名为 evtNAMECHANGE 的属性。例如,如果在表单中创建类的实例,我们可以从 EMPLOYEE 类订阅该事件并从中启用保存按钮。
-
既然这个问题有一个公认的答案,创建一个与这个问题相关联的新问题不是更合理吗?说明问题是什么以及到目前为止您尝试了什么?
-
这可能不是一个坏主意。我想我会留下赏金,以防有人决定回答(另外,我还是失去了赏金,哈哈)。
-
呸,现在才看到赏金(一个赞成票把我带到这里)......我肯定会错过赏金期,但我会找点时间做这件事 - 这是值得的。
标签: oop ms-access interface vba