2011-03-16 54 views
6

是否有可能在vb6中有多个构造函数?我问的原因是因为我看到类初始化,但我不知道我是否可以将0个或更多参数粘贴到构造函数中,或者如果class_initialize是构造函数并且它可以接受任意数量的参数。它的混淆主要是因为我对c#非常熟悉,对于类而言,vb6会混淆不清。VB6中有多个构造函数?

回答

11

Class_Initialize是一个事件,只要实例化类的实例,就会一直被调用。这与C#构造函数没有什么可比性。

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

虽然你可以改变从PrivatePublic VB6的Class_Initialize事件不会有多大意义:因为该事件是在调用实例无论如何,你为什么要显式调用它第二次? (如果你没有,那将是最好有一个从Class_Initialize事件调用的公共方法。)

不能添加参数VB6 Class_Initialize事件,甚至没有Optional的。试图这样做会导致编译错误。

你能做的最好的是推出自己的Initialize方法,以如下参数要求,必须明确要求,或许并有一个内部标志isInitialized状态变量,以确保直到Initialize方法已经不使用类调用。还要考虑一种'工厂'方法:工厂调用PublicNotCreatableFriend Initialize方法的类,并向适合初始化的调用者提供服务。

+1

+1。比我的答案好得多,就在这里。 – David 2011-03-17 13:09:40

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 

编辑
你甚至可以使用可选的和常规参数在一起,但我认为你可能有把可选的放在最后。

+0

+1包含代码示例。 – David 2011-03-16 21:36:35

+0

但是你不能创建一个带任何参数的*构造函数*,可选或强制。 – MarkJ 2011-03-17 11:57:01

+0

@MarkJ - 啊,你说得对。我没有意识到这一点。我没有经常在VB6中使用类,所以从来没有遇到过这个问题。它说[这里](http://www.xtremevbtalk.com/showthread.php?t=313295)构造函数更像是一个事件而不是一个典型的方法。 @Marc Noon:你应该在下面使用onedaywhen的答案。我将在这里保留我的答案,以便参考如何将可选参数添加到自定义'Initialize'方法。 – 2011-03-17 14:33:16