我不知道以前是否曾经问过这个问题,但我们今天在工作中正在讨论它。私有变量(共享/静态)是否应该在标注/定义时实例化,或者在构造函数中执行此操作是否更好?
例如,这对我来说似乎完全没问题......
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
有什么区别?关于使用哪一个,是否存在共识?
答案 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
调用第一个构造函数将输入默认名称,但调用第二个不会。
相反,如果你需要为不同的构造函数初始化变量的不同方法,我肯定会说在构造函数中进行初始化。