Почему бы не добавить конструктор в базовый класс?
Public MustInherit Class B
Public Sub New(arg As String)
Me.member2 = arg
End Sub
Protected member1 As String
Protected member2 As String
End Class
Public Class D1 : Inherits B
Public Sub New(arg As String)
MyBase.New(arg)
Me.member1 = "D1"
End Sub
End Class
Public Class D2 : Inherits B
Public Sub New(arg As String)
MyBase.New(arg)
Me.member1 = "D2"
End Sub
End Class
На самом деле это не уменьшает дублирование, так как каждый производный класс все еще имеет строку, которая вызывает базовый конструктор, передавая егозначение, но оно позволяет вам централизованно поддерживать то, что оно делает с этим значением, и заставляет все производные классы делать это.Таким образом, вы никогда не сможете создать производный класс, в котором вы забудете предоставить это значение.
На самом деле, если вы хотите, чтобы все производные классы предоставили значение по умолчанию для member1
, вы можете добавить это как параметр в базовый конструктор:
Public MustInherit Class B
Public Sub New(member1 As String, member2 As String)
Me.member1 = member1
Me.member2 = member2
End Sub
Private member1 As String
Private member2 As String
End Class
Public Class D1 : Inherits B
Public Sub New(arg As String)
MyBase.New("D1", arg)
End Sub
End Class
Public Class D2 : Inherits B
Public Sub New(arg As String)
MyBase.New("D2", arg)
End Sub
End Class