考虑名为:MyClass
的类模块
它可以通过早期绑定(bind)进行实例化:
Dim cls As MyClass
Set cls = New MyClass
但是可以实例化为:
Dim MyClass As MyClass
Set MyClass = New MyClass
因此,您可以使用同名的对象。
这有什么问题?
最佳答案
VBA 不像 C# 那样区分大小写,因此 class1
和 Class1
是相同的东西..
对对象实例使用与其类相同的名称并没有什么严重错误(意思是:因为编译器允许......),但一般来说它会被认为是非常糟糕的编程练习为类实例使用与其类相同的名称。
唯一的问题是,对于将来接触你的代码甚至你自己的下一个开发人员来说,你可能会对此感到非常困惑。您始终可以右键单击变量名称并选择定义,但在长时间且有问题的运行中,这将是一个真正的痛苦......
假设某人给了您 20K 多行代码,其中包含 50 个类和 150 个实例。他说:有些东西不起作用,你需要调试并找出问题所在......呃,我不想碰那个......
您可以在 VBA 中执行此操作的原因是因为您无法在 VBA 中创建自己的静态类,因此类不会公开任何属性并且不能是静态的,因此在调用 Class1
instance 智能感知只会显示实例的可用属性 - 而不是类。 VBA 也不支持类多态性(因此没有内部 protected 等访问器),因此不可能从类派生。
关于VBA - 命名和实例化类模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20495356/