如何使用迭代从List(派生类)访问基类?

时间:2016-06-16 03:14:40

标签: vb.net

我使用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#代码)

1 个答案:

答案 0 :(得分:1)

显然,没有办法知道任意List(Of MyIFC)实际上包含属于或继承类型Base的成员,所以没有理由认为应该有任何标准功能给你那种类型的物品。如果您知道这些项目将是该类型的事实,您可以简单地在它们出来时进行转换,例如。

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

当然,一旦您获得Base类型的引用,您就无法访问MyIFC的成员,因为Base没有实现该界面。你的例子非常人为,所以我们无法知道在你的特定情况下是否有更好的设计。