У меня есть базовый класс, который я использую с отражением для заполнения полей производных классов, читая из базы данных.
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