VBA - 命名和实例化类模块

标签 vba naming-conventions name-collision

考虑名为:MyClass的类模块

它可以通过早期绑定(bind)进行实例化:

Dim cls As MyClass
Set cls = New MyClass

但是可以实例化为:

Dim MyClass As MyClass
Set MyClass = New MyClass

因此,您可以使用同名的对象。

这有什么问题?

最佳答案

VBA 不像 C# 那样区分大小写,因此 class1Class1 是相同的东西..

对对象实例使用与其类相同的名称并没有什么严重错误(意思是:因为编译器允许......),但一般来说它会被认为是非常糟糕的编程练习为类实例使用与其类相同的名称。

唯一的问题是,对于将来接触你的代码甚至你自己的下一个开发人员来说,你可能会对此感到非常困惑。您始终可以右键单击变量名称并选择定义,但在长时间且有问题的运行中,这将是一个真正的痛苦......

假设某人给了您 20K 多行代码,其中包含 50 个类和 150 个实例。他说:有些东西不起作用,你需要调试并找出问题所在......呃,我不想碰那个......

您可以在 VBA 中执行此操作的原因是因为您无法在 VBA 中创建自己的静态类,因此类不会公开任何属性并且不能是静态的,因此在调用 Class1 instance 智能感知只会显示实例的可用属性 - 而不是类。 VBA 也不支持类多态性(因此没有内部 protected 等访问器),因此不可能从类派生。

关于VBA - 命名和实例化类模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20495356/

相关文章:

vba - 运行时错误 '5' : Invalid procedure call or argument

javascript - 命名类型和实例

c - _t(下划线-t)后面的类型代表什么?

变量和顶级包名称之间的 Java 名称冲突

R:如何防止(或至少预测)基本 R 函数内部的代码与稍后安装的包中的函数之间的名称冲突?

Python - 从不是通过 __init__.py 导入的包中访问模块?

excel - 处理输入框取消选择范围的操作

ms-access - 带延时的文本输入

java - 转移所有权的方法的命名约定

vba - 日期之间的查找检查