我有一个基类,我使用反射来填充派生类的字段,从数据库中读取。
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
答案 0 :(得分:0)
如果您的基类填充派生类中的字段,听起来您应该使用界面而不是您正在做的事情。
至于你的问题,仅仅因为你不喜欢它并没有错。但正如一条评论所说,如果你将第二个New更改为:
Sub New(Optional reader as DbDataReader = Nothing)
然后你满足了一个空构造函数的要求,你可以在没有给出读者的情况下做正确的事。