vb.net - 是否可以在 VB.NET 中覆盖属性并返回派生类型?

标签 vb.net inheritance overriding covariance

考虑以下表示订购系统的类:

Public Class OrderBase
    Public MustOverride Property OrderItem as OrderItemBase
End Class

Public Class OrderItemBase
End Class

现在,假设我们想将这些类扩展到一组更具体的订单类,同时保持 OrderBase 的聚合性质:
Public Class WebOrder
    Inherits OrderBase        

    Public Overrides Property OrderItem as WebOrderItem 
    End Property
End Class

Public Class WebOrderItem
    Inherits OrderItemBase
End Class

WebOrder 类中的 Overriden 属性将导致错误,指出返回类型与 OrderBase 中定义的类型不同……但是,返回类型是 OrderBase 中定义的类型的子类。为什么VB不允许这样做?

最佳答案

你不能这样做 - 它正在改变在基础上定义的签名。要做你想做的事情,你需要使用泛型:

Public Class OrderBase(Of T As IOrderItem)
    Public ReadOnly Property OrderItems As IList(Of T)
End Class

我的 Visual Basic 生锈了所以希望这是准确的...

关于vb.net - 是否可以在 VB.NET 中覆盖属性并返回派生类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2790607/

相关文章:

java - 我如何找到扩展类的方法在哪里

java - 在 Java : storing a field twice, 中哪个更可取,或者将其存储为 protected 基类?

java - 重写方法和奇怪的行为

c++ - 调用一个函数的 child 版本而不是 parent ?

java - 安卓工作室 : @Override "Annotations are not allowed here"

java - 在错误/恢复下一个模式上是否有类似于 vb 的 java 等效项?

.net - 获取文件版本

vb.net - 使用VB.NET发布ClickOnce安装报错 "Exception reading from manifest"

java - 从父类方法调用子类方法

windows - 程序如何请求管理员权限?