VB6中的多个构造函数?

时间:2011-03-16 21:27:03

标签: vb6 vb6-migration

vb6中是否可以有多个构造函数?我问的原因是因为我看到类初始化,但我不知道我是否可以将0或更多参数添加到构造函数中,或者如果class_initialize是构造函数并且它可以接受任意数量的参数。令人困惑的主要原因是因为我对c#非常熟悉,所以对于vb6来说就类而言是混乱的。

2 个答案:

答案 0 :(得分:11)

Class_Initialize是一个事件,只要实例化该类的实例,就会始终调用该事件。它与C#构造函数无法真正比​​较。

例如,请注意Class_Initialize创建为Private,而带有私有构造函数的C#类无法实例化。

虽然您可以将VB6 Class_Initialize事件从Private更改为Public但是没有太大意义:因为无论如何都会在实例化时调用该事件,为什么要调用它明确第二次? (如果你这样做,最好有一个从Class_Initialize事件中调用的公共方法。)

您无法向VB6 Class_Initialize事件添加参数,甚至不能添加Optional事件。尝试这样做会导致编译错误。

你可以做的最好的事情是使用参数根据需要滚动你自己的Initialize方法,这个方法必须被显式调用,也许并且有一个内部标志isInitialized状态变量以确保该类不是在调用Initialize方法之前使用。还要考虑一种“工厂”方法:工厂调用PublicNotCreatableFriend 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

修改
您甚至可以将可选参数和常规参数一起使用,但我认为您可能必须将可选参数放在最后。