2011-03-16 91 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