在声明中初始化类成员实例?

时间:2013-06-06 16:06:23

标签: vb.net

由于某些原因,我在这样的声明中初始化一个类成员似乎是错误的:

Class Foo
    private  _bar as New List(Of String)

    Public Sub New()

    End Sub

End Class

这似乎“更好”:

Class Foo
    private  _bar as List(Of String)

    Public Sub New()
       _bar = New List(Of String)
    End Sub
End Class

question表示没有区别。有一种方式比另一种更好(更好的可读性,隐藏的陷阱等等)?

3 个答案:

答案 0 :(得分:2)

客观地说,我更喜欢构造函数,因为构造函数的职责是初始化所有相关成员

该成员本身太愚蠢,无法知道他应该活到什么时候。 就像分娩一样,宝宝不会决定何时出生。母亲(建设者)知道什么时候到来!

在创建类的新实例的那一刻,成员被声明为第一个并且在构造函数之后(至少调试器以这种方式步进)

所以如果你有这个课程:

Public Class Test
        Private test1 as List(Of Integer)(New Integer() {1, 2})

        Public Sub New()
            test1 = new List(Of Integer)(New Integer() {3, 4})
        End Sub
End Class

在本能化后,test1将包含3和4。

如果一个班级中有很多成员,那么更具可读性

答案 1 :(得分:0)

我发现自己使用这两种方法来做到这一点,但如果它是一个具有大量构造函数和大量成员的类,我不想记得设置每个变量每个构造函数,所以在这种情况下我宁愿使用

声明值
public class test

private test1 as list(of String) = new List(of String)

public sub new()
End sub

End class

但我认为这一切归结为偏好

答案 2 :(得分:0)

在创建新课程时,我几次问自己这个问题。发现两者之间没有真正的区别,我现在初始化声明中的所有内容,除非涉及参数,然后才使用构造函数。毕竟,构造函数可以覆盖声明值,因此它不必是一个另一个。

此外,当时我还受到this old article的影响,它提到了如何为数据绑定工作初始化变量,而工作示例在声明中使用了初始化,但在现代版本的Visual Studio / .NET框架中这似乎没有任何区别。

在一天结束时,这似乎是一个偏好问题,对我来说,初始化声明意味着更少的行,这意味着代码更具可读性。