我有几十个类都实现了相同的接口,并且许多方法具有相同的实现。每当我添加一个新类时,我都要做很多复制和粘贴。如何减少代码重复?
我听说你应该把公共代码放在一个帮助器类中,但是很多这些方法真的很简单,所以调用一个辅助方法几乎不比做实际工作简单。
继承会保存重新声明所有这些方法,但是对于那些没有相同实现的几个类来说会很麻烦。
示例:
几乎每个班级都相同......
Public Sub ThingWasDeleted(ByVal deletedThing As Thing) Implements Iinterface.ThingWasDeleted
If MyThing Is deletedThing Then
MyThing = Nothing
End If
End Sub
......但偶尔会有所不同:
Public Sub ThingWasDeleted(ByVal deletedThing As Thing) Implements IInterface.ThingWasDeleted
'Do nothing
End Sub
在每个类中都相同,但已经像调用公共帮助器方法一样简单:
Public ReadOnly Property DisplayName() As String Implements IInterface.DisplayName
Get
Return DisplayNameShared
End Get
End Property
答案 0 :(得分:3)
如果你把这些方法放在一个帮助器类中,那么它是否会像一个抽象的基类一样混乱(如果不是更多),你可以在需要时覆盖基类的功能?
例如:
Public MustInherit Class BaseClass
Public ReadOnly Property DisplayName() As String
Get
Return DisplayNameShared
End Get
End Property
Public Overridable Sub ThingWasDeleted(ByVal deletedThing As Thing)
If MyThing Is deletedThing Then
MyThing = Nothing
End If
End Sub
End Class
这提供了所有继承类可以使用的属性的定义,并为继承类提供了覆盖和创建自己的ThingWasDeleted
实现的选项。
例如:
Public Class MyClass
Inherits BaseClass
Public Overrides Sub ThingWasDeleted(ByVal deletedThing As Thing)
' Do nothing
End Sub
End Class
另一方面,如果您编写了一个帮助程序类,则必须定义每个方法,而开发人员(可能是您可能也可能不是)必须知道要更改哪个方法。此外,您可以选择使用基本(抽象)类中的现有功能,而不是选择使用基本(抽象)类中的现有功能,而是必须调用每个正确的辅助方法。
就个人而言,我更喜欢前一个选项,主要是因为继承类不必调用任何东西来获得在基类中建立的基本功能,并且可以根据具体情况覆盖它们所需的内容。相反,将它们全部放在辅助类中意味着您必须至少编写代码来调用每个类中的每个必需辅助方法。