VB.Net接口定义函数返回继承的类型集合

时间:2014-04-17 14:55:45

标签: .net vb.net inheritance interface polymorphism

目前我们正在使用对象和对象集合,如下所示:

Public Class childObj Inherits BaseObjClass Implements IInspRevChild  
  ...  
End Class  

Public Class childObj_Collection Inhertis BaseObjCollClass(Of childObj)  
  ...  
End Class  

Public Class parentObj Inherits BaseObjClass Implements IInspRev  
  ...  
  Public Function GetChildren() AS childObj_Collection Implements IInspRev.GetChildrenCollection
    ...  
  End Function  
End Class  

我想定义一个带有GetChildren函数定义的接口。

我打算尝试这样的事情:

Public Interface IInspRev  
  Function GetChildrenCollection() As BaseObjCollClass(Of BaseObjClass )  
End Interface  

但是编译器并不喜欢这样。有人能让我直截了当吗?

1 个答案:

答案 0 :(得分:1)

你有一个循环引用问题。 BaseObjClass实施IInspRev,而BaseObjClass依赖于GetChildrenCollection。编译器处于“鸡或蛋”状态,因此失败。

定义IInspRevReadonly Property Childrens() As ICollection(Of IInspRev) 方法的更好方法可能是:

Readonly Property Childrens As IEnumerable(Of IInspRev)

如果您不需要界面来添加,删除或替换子项,这将更好:

{{1}}

请注意,我将其设为readonly属性而不是方法。这种公开子对象集合的方式在.NET Universe中是首选。