派生类中的VB.NET构造函数

时间:2014-01-15 11:12:13

标签: vb.net constructor derived-class base-class

我有一个基类,我使用反射来填充派生类的字段,从数据库中读取。

Public MustInherit Class DaoBase : Implements IEquatable(Of DaoBase)

        Sub New()
               ' Empty, hate to have it
        End Sub

        Sub New(reader As DbDataReader)
              '  Reads the DB and fills the instance fields
        End Sub

        '  More stuff...
End Class

派生类通常有一个非默认构造函数来设置其字段:

Public Class Customer
        Inherits DaoBase

        Public Sub New(
            id As Integer,
            description As String)

            Me.id = id
            Me.description = description 
        End Sub

End Class

问题:

1)我不喜欢在基类中使用空构造函数。它在那里未使用,可能会创建一个处于错误状态的对象。如果我删除它,那么编译器会给出错误,因为缺少默认构造函数,派生类构造函数应该调用唯一的基类构造函数。

2)我无法做new Customer(myReader),因为该构造函数不在派生类中,即使它位于基类中。我必须明确声明它,我不喜欢它。

Public Class Customer
        Inherits DaoBase

        Public Sub New(
            id As Integer,
            description As String)

            Me.id = id
            Me.description = description 
        End Sub

        Public Sub New(reader As DbDataReader)
            MyBase.New(reader)
        End Sub 

End Class

1 个答案:

答案 0 :(得分:0)

如果您的基类填充派生类中的字段,听起来您应该使用界面而不是您正在做的事情。

至于你的问题,仅仅因为你不喜欢它并没有错。但正如一条评论所说,如果你将第二个New更改为:

Sub New(Optional reader as DbDataReader = Nothing)

然后你满足了一个空构造函数的要求,你可以在没有给出读者的情况下做正确的事。