如何以.net形式处理链接构造函数和InitializeComponent

时间:2012-11-06 07:12:04

标签: windows vb.net winforms constructor

说我有一个Windows窗体的构造函数

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之前,是否有关于您应该或不应该做什么的指导?或者两次调用它是否安全而没有任何实际后果?

干杯!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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