如何使用接口来提供与多重继承(重叠继承)相同的功能?



我有一个基类,一个类和一个子基类从这个基类继承,还有两个子类从这个基类继承。

Public MustInherit Class Base
Public Function F1() As Int32
Return 1
End Function
End Class
Public Class B1
Inherits Base
End Class
Public MustInherit Class SubBase
Inherits Base
Public Function F2() As Int32
Return 2
End Function
End Class
Public Class S1
Inherits SubBase
End Class
Public Class S2
Inherits SubBase
Public Function F3() As Int32
Return 3
End Function
End Class

现在需要添加一个新函数F4。这是非常复杂的:不允许重复的代码。

只需要提供给B1和S1它必须不允许S2暴露它

有人建议,接口可以提供多重继承,但是如何提供呢?由于接口不携带实现,我不知道如何使用一个接口在两个类中实现新函数。你能给我指个正确的方向吗?

Public Function F4() As Int32
Return 4
End Function

编辑:重新设计没有问题,只要所有显示的功能(而不是更多)对B1, S1和S2可用(加上新功能F4对B1和S1可用,但不包括S2)。

一个可能的解决方案是创建一个强制实现F4的接口。

Public Interface I4
Function F4() As Int32
End Interface

然后一个新的类实现该接口。

Public Class S3
Implements I4
Public Function F4() As Int32 Implements I4.F4
Return 4
End Function
End Class

然后需要F4的2个类(B1和S1)实现I4,并在函数体中实例化新类S3的对象。因为S2不需要F4,所以不修改

Public Class B1
Inherits Base
Implements I4
Public Function F4() As Int32 Implements I4.F4
Dim o3 As New S3
Return o3.F4
End Function
End Class
Public Class S1
Inherits SubBase
Implements I4
Public Function F4() As Int32 Implements I4.F4
Dim o3 As New S3
Return o3.F4
End Function
End Class

漂亮又优雅?不是真的。按预期工作?是的。

Public Class TestMI
Public Sub MI()
Dim b1 As New B1
Console.WriteLine(b1.F1.ToString)   'From Class Base.
Console.WriteLine(b1.F4.ToString)   'New F4 from S3 implementing I4.
Dim s1 As New S1
Console.WriteLine(s1.F1.ToString)   'From Class Base.
Console.WriteLine(s1.F2.ToString)   'From Class SubBase.
Console.WriteLine(s1.F4.ToString)   'New F4 from S3 implementing I4.
Dim s2 As New S2
Console.WriteLine(s2.F1.ToString)   'From Class Base.
Console.WriteLine(s2.F2.ToString)   'From Class SubBase.
Console.WriteLine(s2.F3.ToString)   'Native to S2.
'                                    No exposure of F4, as intended.
End Sub
End Class

我更喜欢多重继承。

相关内容

  • 没有找到相关文章

最新更新