2016-06-16 47 views
0

我使用List(Of Interface)收集了不同的派生類實例。 自然,我只能使用迭代訪問Interfaced方法。如何使用迭代從List(派生類)訪問基類?

Public Class Base 
    Public Sub Work_inBase() 
    End Sub 
End Class 
'-------------------------- 
Public Interface MyIFC 
    Sub Work() 
End Interface 
'-------------------------- 
Public Class Child1 
    Inherits Base 
    Implements MyIFC 

    Public Sub Work() Implements MyIFC.Work 
    End Sub 
End Class 
'-------------------------- 
Public Class Child2 
    Inherits Base 
    Implements MyIFC 

    Public Sub Work() Implements MyIFC.Work 
    End Sub 
End Class 
'-------------------------- 
Public Sub MainProgram() 
    Dim C1 As New Child1() 
    Dim C2 As New Child2() 
    Dim MyList As New List(Of MyIFC) 

    MyList.Add(C1) 
    MyList.Add(C2) 

    MyList(0).Work() >>> OK because it was interfaced 
    MyList(0).Work_inBase() >>> does not work, cannot access to base 
End Sub 

是否有任何其他方式來訪問基類方法或成員(這將是非常大的)?也許需要不同的課程設計?

謝謝(VB是首選,但我同樣可以閱讀C#代碼太)

回答

1

顯然是沒有辦法知道的任意List(Of MyIFC)實際上包含成員是還是繼承類型Base,所以沒有理由應該有任何標準功能可以給你這種類型的項目。如果你知道這些物品是這種類型的,那麼當它們出來時,你可以簡單地將它們轉換成這種類型。

DirectCast(MyList(0), Base).Work_inBase() 

當然,一旦你有Base類型的引用,那麼你不能訪問的MyIFC因爲Base沒有實現接口的成員。你的例子非常有意思,所以我們無法知道在你的具體情況下是否有更好的設計。

+0

我發現在鑄造之前測試類型是很有用的......例如,如果TypeOf(MyList(0))是基礎 –