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 Substitution Principleを破ります.

Figures継承の代わりに構成を使用する必要があると強く思います-したがってList(Of Figure)、派生するのではなくプライベートフィールドがあり、必要な操作を公開し、それらの操作のみを公開します。ほとんどの操作は、おそらくリストに委任するだけで済みます。

于 2013-03-08T20:35:42.260 に答える