0

Windowsフォームに2つのコンストラクターがあるとします

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

2 番目のコンストラクターを使用すると、InitializeComponent が 2 回呼び出されます。それは大丈夫ですか?私はそれを防ぐように努めるべきですか?どのように?

2 番目のコンストラクターから削除できると言うかもしれませんが、InitializeComponent を呼び出す前に割り当て (_bar = Bar など) を開始してもよろしいですか? InitializeComponent を呼び出す前にすべきこと、すべきでないことに関するガイドラインはありますか? それとも、実際の結果なしに 2 回呼び出しても安全ですか?

乾杯!

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

この場合、操作の順序は重要ではないため、finalコンストラクターをすぐに呼び出して、次の結果が返されたら特別なタスクを実行できます。

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 に答える