0

在下面的示例中,我想向客户端隐藏 .sort() 方法,我该如何实现?

Namespace test
  Class Figure
    Implements IComparable(Of Figure)
    Public Property Area As Double
    Public Function CompareTo(ByVal other As Figure) As Integer Implements System.IComparable(Of Figure).CompareTo
      CompareTo = Me.Area.CompareTo(other.Area)
    End Function
  End Class
  Class Figures
    Inherits System.Collections.Generic.List(Of Figure)
    Public Shadows Sub Add(ByVal nieuweFiguur As Figure)
      MyBase.Add(nieuweFiguur)
      Me.Sort()
    End Sub
  End Class
  Class Client
    Public Shared Sub Main()
      Dim figures As New Figures
      figures.Add(New Figure With {.Area = 12})
      figures.Add(New Figure With {.Area = 16})
      '***********************************************************
      figures.Sort() 'i want to hide the sort method to the client
      '***********************************************************
    End Sub
  End Class
End Namespace
4

1 回答 1

2

很简单,如果您不希望调用者能够像使用基类的实例一样使用您的类的实例,那么您一开始就不应该有这种继承关系——它违反了Liskov 替换原则.

我强烈怀疑Figures应该使用组合而不是继承 - 所以它会有一个私有字段List(Of Figure)而不是从它派生,并且你会公开你想要的任何操作,并且公开那些操作。大多数操作可能只是委托给列表。

于 2013-03-08T20:35:42.260 回答