2012-11-06 12 views
0

說,我有兩個構造Windows窗體如何處理鏈接建設者和的InitializeComponent在.NET形式

Sub New (byref Foo as Foo) 
    InitializeComponent() 
    ...do some work 
End Sub 

Sub New (byref Foo as Foo, Bar as Bar) 
    InitializeComponent() 
    _bar = Bar 
    Me.New(Foo) 
End Sub 

當使用第二個構造,在InitializeComponent調用兩次。這可以嗎?我應該嘗試並預防它嗎?怎麼樣?

您可能會說我可以從第二個構造函數中消除它,但是在調用InitializeComponent之前開始進行賦值(如_bar = Bar)可以嗎? 在調用InitializeComponent之前,你有什麼或不應該做什麼指導?或者,將它稱爲兩次而沒有任何實際後果是安全的?

乾杯!

回答

1

致電InitializeComponent只在最深的構造函數(具有最大數量的參數)。然後鏈接其他構造函數以調用此構造函數併爲缺少的參數提供默認值。

這裏是C#示例

public MyForm(Foo foo) 
    : this(foo, null) 
{ 
} 

public MyForm(Foo foo, Bar bar) 
{ 
    InitializeComponent(); 
    _bar = bar; 
    // do some work 
} 

我相信在VB中它看起來像這樣

Public Sub New(foo As Foo) 
    Me.New(foo, Nothing) 
End Sub 

Public Sub New(foo As Foo, bar As Bar) 
    InitializeComponent()   
    _bar = bar 
    ' do some work 
End Sub 
+0

好主意。謝謝! –

0

在這種情況下,操作的順序並不重要,所以我可以簡單地調用最後立即構造,然後在返回時執行我的特殊任務:

Public Sub New(ByVal wpPost As WordPressPost, URLs As String()) 
    Me.New(wpPost) 
    _URLs = URLs 
End Sub 

Public Sub New(ByVal wpPost As WordPressPost) 
    InitializeComponent() 
    _wppost = wpPost 
End Sub