1

我有几十个类都实现了相同的接口,并且许多方法具有相同的实现。每当我添加新课程时,我都必须进行大量复制和粘贴。如何减少代码重复?

我听说您应该将公共代码放在帮助程序类中,但是其中很多方法真的很简单,所以调用帮助程序方法几乎没有比做实际工作更简单。

继承将节省重新声明所有这些方法,但它会使少数没有相同实现的类变得混乱。

例子:

几乎每堂课都一样...

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
4

1 回答 1

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

另一方面,如果您编写了一个辅助类,则必须定义每个方法,并且开发人员(可能是也可能不是您)必须知道要更改哪个方法。此外,您创建的每个类都必须调用每个适当的辅助方法,而不是选择使用基(抽象)类中的现有功能。

就个人而言,我更喜欢前一种选择,主要是因为继承类不需要调用任何东西来获得在基类中建立的基本功能,并且可以根据具体情况覆盖它们需要的东西。相反,将它们全部放在一个辅助类中意味着您至少必须编写代码来调用您拥有的每个类中的每个必要的辅助方法。

于 2013-06-22T09:29:02.970 回答