考虑名为的类模块:MyClass
它可以使用早期绑定来实例化:
Dim cls As MyClass
Set cls = New MyClass
但是可以用以下方式实例化:
Dim MyClass As MyClass
Set MyClass = New MyClass
因此,您使用的是同名对象。
这有什么问题?
考虑名为的类模块:MyClass
它可以使用早期绑定来实例化:
Dim cls As MyClass
Set cls = New MyClass
但是可以用以下方式实例化:
Dim MyClass As MyClass
Set MyClass = New MyClass
因此,您使用的是同名对象。
这有什么问题?
VBA 不像 C# 那样区分大小写,所以class1
它们Class1
是相同的东西..
对对象实例使用与其类相同的名称并没有什么严重错误(意思是:因为编译器允许...),除非通常认为对类实例使用相同的名称是一种非常糟糕的编程习惯它的类。
唯一的问题是,对于下一个将接触您的代码甚至您自己的开发人员来说,您可能会对此感到非常困惑。您始终可以右键单击变量的名称并选择定义,但在漫长而错误的运行中,这将是一个真正的痛苦......
假设 somone 为您提供了 20K+ 行代码,其中包含 50 个类和 150 个实例。他说:有些东西不起作用,你是调试和发现问题的人......我不想碰那个......
您可以在 VBA 中执行此操作的原因是因为您无法在 VBA 中创建自己的静态类,因此类不公开任何属性并且不能是静态的,因此在调用Class1
实例时,智能感知只会向您显示实例的可用属性——不是类。VBA 也不支持类多态性(因此没有内部受保护等访问器),因此不可能从类派生。