vb6中是否可以有多个构造函数?我问的原因是因为我看到类初始化,但我不知道我是否可以将0或更多参数添加到构造函数中,或者如果class_initialize是构造函数并且它可以接受任意数量的参数。令人困惑的主要原因是因为我对c#非常熟悉,所以对于vb6来说就类而言是混乱的。
答案 0 :(得分:11)
Class_Initialize
是一个事件,只要实例化该类的实例,就会始终调用该事件。它与C#构造函数无法真正比较。
例如,请注意Class_Initialize
创建为Private
,而带有私有构造函数的C#类无法实例化。
虽然您可以将VB6 Class_Initialize
事件从Private
更改为Public
但是没有太大意义:因为无论如何都会在实例化时调用该事件,为什么要调用它明确第二次? (如果你这样做,最好有一个从Class_Initialize
事件中调用的公共方法。)
您无法向VB6 Class_Initialize
事件添加参数,甚至不能添加Optional
事件。尝试这样做会导致编译错误。
你可以做的最好的事情是使用参数根据需要滚动你自己的Initialize
方法,这个方法必须被显式调用,也许并且有一个内部标志isInitialized
状态变量以确保该类不是在调用Initialize
方法之前使用。还要考虑一种“工厂”方法:工厂调用PublicNotCreatable
和Friend Initialize
方法的类,并提供给适合初始化的调用者。
答案 1 :(得分:2)
在VB6中,您可以将方法参数指定为optional
。这意味着您在调用函数时不必指定它们。如果未指定它们,则在方法签名中给出默认值。
来自here的示例:
Private Sub Draw(Optional X As Single = 720, Optional Y As Single = 2880)
Cls
Circle (X, Y), 700
End Sub
这可以称为:
Draw 'OR
Draw 100 'OR
Draw 200, 200
修改强>
您甚至可以将可选参数和常规参数一起使用,但我认为您可能必须将可选参数放在最后。