私有变量实例化:何时定义或在构造函数内?

时间:2010-06-24 17:46:54

标签: vb.net language-agnostic instantiation private-members

我不知道以前是否曾经问过这个问题,但我们今天在工作中正在讨论它。私有变量(共享/静态)是否应该在标注/定义时实例化,或者在构造函数中执行此操作是否更好?

例如,这对我来说似乎完全没问题......

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 个答案:

答案 0 :(得分:3)

这真的是一个偏好问题。我认为更重要的是一致性:如果你在内联实例化一些变量,而在构造函数中实例化其他变量,它可能会变得更难维护,因为它不清楚实例化的位置。

一个好主意是将变量声明保留在构造函数的上方(这样您就不必跳转来查找所有变量实例化),并实例化内联的所有内容。对于那些需要更复杂的初始化代码的少数对象,可以使用构造函数。

答案 1 :(得分:0)

我想知道你的第二个例子是否是旧版VB6中的宿醉,当时良好的练习通常意味着避免As New声明,因为它不是最佳的(自动实例化意味着每次运行时检查)而你永远无法可靠地测试Is Nothing等实例

答案 2 :(得分:0)

成员变量在构造函数之前初始化;否则其他一切都是等价的,所以这完全取决于你。我会选择更易读/可维护的/更少的错误。

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

调用第一个构造函数将输入默认名称,但调用第二个不会。

相反,如果你需要为不同的构造函数初始化变量的不同方法,我肯定会说在构造函数中进行初始化。