2013-03-08 3 views
0

В следующем примере я хотел бы скрыть метод .sort() для клиента, как я мог это достичь?Скрыть вид коллекции в VB.NET

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 

ответ

2

Проще говоря, если вы не хотите, чтобы абонент, чтобы иметь возможность использовать экземпляр вашего класса, как если бы это был экземпляр базового класса, вы не должны иметь такие отношения наследования, чтобы начать с - он разбивает Liskov Substitution Principle.

Я сильно подозреваю, что Figures следует использовать композицию вместо наследования - так он будет иметь личное поле List(Of Figure) вместо получения от него, и вы бы подвергать какой бы операции, которые вы хотите, и только эти операции. Большинство операций, возможно, просто делегируются в список.

+0

Спасибо, Джон, я был на неправильном пути, и вы показали правильный путь – peter