4

これは悪い考えですか?パブリックコンストラクター内でジェネリックプライベートコンストラクターを呼び出すと、複数のインスタンスが作成されますか、それともこれはクラス変数を初期化する有効な方法ですか?

Private Class MyClass
    Dim _msg As String

    Sub New(ByVal name As String)
        Me.New()
        'Do stuff
    End Sub

    Sub New(ByVal name As String, ByVal age As Integer)
        Me.New()
        'Do stuff
    End Sub

    Private Sub New() 'Initializer constructor
        Me._msg = "Hello StackOverflow"
        'Initialize other variables
    End Sub
End Class
4

3 に答える 3

4

これは完全に有効であり、コンストラクターコードを再利用するために一般的に使用される方法です。1つのオブジェクトのみがインスタンス化されます。

于 2012-06-28T21:13:57.563 に答える
2

これは有効なアプローチです。新しい関数を呼び出すことができる場所には、いくつかの注意点があります。

Sub Newコンストラクターは、クラスの作成時に1回だけ実行できます。同じクラスまたは派生クラスのいずれかから、別のコンストラクターのコードの最初の行以外の場所で明示的に呼び出すことはできません。

オブジェクトの有効期間について詳しくは、MSDNをご覧ください。

于 2012-06-28T21:18:34.693 に答える
1

このようなコンストラクターをチェーンしても、追加のオブジェクトインスタンスは作成されません。

初期化の特定の部分のコードを1回だけ記述することが望ましいです。これは一般的で有効な初期化パターンです。

于 2012-06-28T21:14:15.077 に答える