我使用List(Of Interface)收集了不同的派生类实例。 当然,我只能使用迭代访问Interfaced方法。
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#代码)
答案 0 :(得分:1)
显然,没有办法知道任意List(Of MyIFC)
实际上包含属于或继承类型Base
的成员,所以没有理由认为应该有任何标准功能给你那种类型的物品。如果您知道这些项目将是该类型的事实,您可以简单地在它们出来时进行转换,例如。
DirectCast(MyList(0), Base).Work_inBase()
当然,一旦您获得Base
类型的引用,您就无法访问MyIFC
的成员,因为Base
没有实现该界面。你的例子非常人为,所以我们无法知道在你的特定情况下是否有更好的设计。