5

これが以前に尋ねられたかどうかはわかりませんが、今日、私の仕事でそれについて話し合っています. プライベート変数 (共有/静的) は、ディメンション化/定義されているときにインスタンス化する必要がありますか?それとも、コンストラクター内でこれを行う方が良い方法ですか?

たとえば、これは私にはまったく問題ないようです...

Public Class IpCam

    Private Const HOST As String = "http://test.com/url/example"
    Private Shared _Example As New OurClass(HOST)

    Public Shared ReadOnly Property Example() As OurClass
        Get
            Return _Example
        End Get
    End Property
End Class

しかし、他の人はこのようにすべきだと言っています...

Public Class IpCam

    Private Const HOST As String = "http://test.com/url/example"
    Private Shared _Example As OurClass

    Public Sub New()
        _Example = New OurClass(HOST)
    End Sub

    Public Shared ReadOnly Property Example() As OurClass
        Get
            Return _Example
        End Get
    End Property
End Class

違いはなんですか?どちらを使用するかについて共通のコンセンサスはありますか?

4

4 に答える 4

3

それは本当に好みの問題です。より重要なのは一貫性だと思います。いくつかの変数をインラインでインスタンス化し、他の変数をコンストラクターでインスタンス化すると、何がどこでインスタンス化されるかが不明になるため、維持が難しくなる可能性があります。

コンストラクターのすぐ上に変数宣言を保持し (すべての変数のインスタンス化を見つけるために飛び回る必要がないようにするため)、すべてをインラインでインスタンス化することをお勧めします。より複雑な初期化コードを必要とする少数のオブジェクトについては、コンストラクターを使用できます。

于 2010-06-24T18:06:59.493 に答える
0

メンバー変数は、コンストラクターの前に初期化されます。それ以外の場合はすべて同等であるため、完全にあなた次第です。私は、より読みやすく、保守しやすく、エラーが少ないものを選びます。

于 2012-03-03T03:29:41.990 に答える
0

あなたの2番目の例は、As New最適ではなかったため(自動インスタンス化は毎回実行時チェックを意味していた)、インスタンスを確実にテストすることができなかったため、一般的に宣言を避けることを意味していた古いIs NothingVB6の時代からの二日酔いなのだろうか. .

于 2010-06-25T09:32:20.963 に答える
-1

変数をインラインで初期化する利点の 1 つは、各コンストラクターに初期化を配置することを覚えておく必要がないこと、または他の各コンストラクターが初期化でコンストラクターを呼び出すことを確認する必要がないことです。たとえば、次のコードをご覧ください。

Public Class Person

    Public Sub New()
        _name = "asdlfkj"
    End Sub
    Public Sub New(ByVal age As Integer)
        _age = age
    End Sub

    Private _name As String
    Public ReadOnly Property Name As String
        Get
            Return _name
        End Get
    End Property

    Private _age As Integer = 17
    Public ReadOnly Property Age As Integer
        Get
            Return _age
        End Get
    End Property
End Class

最初のコンストラクターを呼び出すとデフォルト名が設定されますが、2 番目のコンストラクターは呼び出されません。

逆に、コンストラクターごとに異なる方法で変数を初期化する必要がある場合は、コンストラクターで初期化することをお勧めします。

于 2010-07-21T04:19:51.680 に答える