VB类最佳实践 - 提供所有属性值?

时间:2010-03-16 14:42:12

标签: vb.net class constructor

很抱歉,如果这有点随机,但是在实现类时,为类的所有字段赋值是否是一种好习惯?我只是想知道是否更好的做法是让一个不带参数的构造函数并给出所有字段的默认值,或者是否应该分配具有值的字段而在需要之前保留其他字段?

我希望这是有道理的, 贝基

4 个答案:

答案 0 :(得分:1)

您的类'构造函数应该接受足够的参数以使其处于可用状态。

您可以在构造函数中使用Optional Parameters来获得您正在寻找的相同功能。

通过这种方式,您可以按名称设置所需的属性,并将其余属性保留为默认值,直到您需要更改它们为止。

Sub Notify(ByVal Company As String, Optional ByVal Office As String = "QJZ")
   If Office = "QJZ" Then
      Debug.WriteLine("Office not supplied -- notifying Headquarters")
      Office = "Headquarters"
   End If
   ' Code to notify headquarters or specified office.
End Sub

请记住,可选参数必须在所有非可选参数之后。

答案 1 :(得分:0)

理想的做法是在构造函数返回后立即使对象处于可用状态。这减少了错误,从而无意中使用了部分“就绪”对象。

答案 2 :(得分:0)

我不知道它是否会产生性能差异,但是您有明确默认值的任何字段我个人更喜欢在声明中分配它们,如下所示:

Public Class MyClass
    Private pIsDirty As Boolean = False
    Private pDated as Date = Now()
End Class

请记住大多数“简单”类型,如布尔值,整数等自动默认值,并且不需要初始化,但我在这里作为示例显示,有时为了清楚,您仍然需要它。另外,因为我写的任何类都是供内部使用的(我们不销售任何代码对象供公众使用)我可以向我的类的消费者保证。所以我通常只编写一个最小的构造函数(如果需要非默认的构造函数),只接受主要字段,并使用VB中的新With语法旋转任何其他值,如下所示:

Dim myObj = New SomeClass() With { .Prop1 = "value", .Prop2 = Now() }

答案 3 :(得分:0)

这取决于。你打算怎么用这门课?这堂课的目的是什么? (即它是数据库建模的实体类还是其他类)

我总是使用可为空的属性创建我的实体类,当使用不带参数的构造函数实例化类时,这些属性都为null。然后当我打电话时.Load我知道所有属性都反映了数据库。

添加一个调用.Load并从数据库中分配所有属性已知值的构造函数也是一条可行的路径。

如果您不是指实体建模类,那么它实际上取决于您对该类的使用。

我个人的偏好是为所有属性分配一个已知值(来自构造函数参数),因此该类处于已知 - 中立状态。