2012-01-02 72 views
0

我需要從SchoolGroup,但不是從School修改孩子。 我怎樣才能實現對SchoolGroup類相同的屬性,知道我需要從任何Collective迭代孩子,但添加和從SchoolGroup ....列表(屬性)訪問和繼承:iterration和修改

Class Collective 
    ' just iteration ' 
    Public MustOverride Children as ReadonlyList(Of Child) 

Class School 
    Inherits Collective 
    ' just iteration foreach SchoolGroup' 
    Public Overrides Property Children as ReadonlyList(Of Child) 

Class SchoolGroup 
    Inherits Collective 
    ' iteration and modification ' 
    Public Overrides Property Children as ReadonlyList(Of Child) 
    ' CANT USE THE SAME NAME.... ' 
    Public Property Children as List(Of Child) 

回答

1

Shadow在SchoolGroup僅刪除屬性,以便你可以用不同的返回類型來實現它。

Public Class Collective 
    Public Overridable Property Children As ReadonlyList(Of Child) 
End Class 

Public Class School 
    Inherits Collective 
    Public Overrides Property Children As ReadonlyList(Of Child) 
End Class 

Public Class SchoolGroup 
    Inherits Collective 
    Public Shadows Property Children As List(Of Child) 
End Class 

順便說一句:你也許可以轉儲ReadonlyList(Of Child)贊成IEnumerable(Of Child),這基本上是枚舉目的的只讀列表。

+0

我需要在集體進行迭代的兒童。 – serhio 2012-01-02 16:49:52

+0

相應地更改了我的答案。另外,如果你想遍歷'Collective'中的屬性,它必須設置爲'Overridable'而不是MustOverride' – 2012-01-02 16:58:53

+0

+1。我喜歡IEnumerable方法,因爲它默認是隻讀的。然後,List(Of Child)將保持私有狀態,並且ScoolGroup將具有像AddChild,RemoveChild這樣的方法。 – 2012-01-02 17:55:36

1

我個人更喜歡在這種情況下的界​​面,因爲Collective沒有任何實際的兒童數據,學校和SchoolGroup都沒有通過壓倒財產獲得任何真正的優勢。

例如:

Public Interface IChildren 
    Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of Child) 
End Interface 

Public MustInherit Class Collective 
    Implements IChildren 

    Public MustOverride Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of Child) Implements IChildren.GetEnumerator 
End Class 

Public Class School 
    Inherits Collective 

    Public Property Children As New ReadOnlyList(Of Child) 

    Public Overrides Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of Child) 
     Return Children.GetEnumerator 
    End Function 
End Class 

Public Class SchoolGroup 
    Inherits Collective 

    Public Property Children As New List(Of Child) 

    Public Overrides Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of Child) 
     Return Children.GetEnumerator 
    End Function 
End Class 

這可以被用作:

Dim oGroup As New SchoolGroup 
    oGroup.Children.Add(New Child) 
    ProcessChildren(oGroup) 

其中過程的兒童接受一個接口實現者

Public Sub ProcessChildren(oCollection As IChildren) 
    For Each oChild As Child In oCollection 
     ' Do something 
    Next 
End Sub