0

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

干杯!

4

2 回答 2

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
于 2012-11-06T07:19:06.903 回答
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
于 2012-11-06T07:24:31.397 回答