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

前端之家收集整理的这篇文章主要介绍了是否可以覆盖属性并在VB.NET中返回派生类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请考虑以下表示订购系统的类:
  1. Public Class OrderBase
  2. Public MustOverride Property OrderItem as OrderItemBase
  3. End Class
  4.  
  5. Public Class OrderItemBase
  6. End Class

现在,假设我们想要将这些类扩展为更具体的订单类集,保持OrderBase的聚合性质:

  1. Public Class WebOrder
  2. Inherits OrderBase
  3.  
  4. Public Overrides Property OrderItem as WebOrderItem
  5. End Property
  6. End Class
  7.  
  8. Public Class WebOrderItem
  9. Inherits OrderItemBase
  10. End Class

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

你不能这样做 – 它正在改变基础上定义的签名.要做你想做的事,你需要使用泛型:
  1. Public Class OrderBase(Of T As IOrderItem)
  2. Public ReadOnly Property OrderItems As IList(Of T)
  3. End Class

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

猜你在找的VB相关文章