Можно ли указать тип возвращаемого значения "Derivative (of T)" для подпрограммы MustOverride в VB.NET? - PullRequest
0 голосов
/ 22 апреля 2010

VB.NET 2008 .NET 3.5

У меня есть два базовых класса, которые являются MustInherit (частичные). Давайте назовем один класс OrderBase, а другой - OrderItemBase.

Определенный тип заказа и позиции заказа будет наследоваться от этих классов. Давайте назовем эти WebOrder (наследует от OrderBase) и WebOrderItem (наследует от OrderItemBase).

Теперь в общей схеме WebOrder представляет собой составной класс, содержащий WebOrderItem, например:

Public Class WebOrder
    Inherits OrderBase

    Public Property OrderItem() as WebOrderItem
    End Property

End Class

Public Class WebOrderItem
    Inherits OrderItemBase
End Class

Чтобы убедиться, что любой класс, производный от OrderBase, имеет свойство OrderItem, я хотел бы сделать что-то подобное в классе OrderBase:

Public MustInherit Class OrderBase
    Public MustOverride Property OrderItem() as Derivative(Of OrderItemBase)
End Class

Другими словами, я хочу, чтобы производный класс принудительно содержал свойство, которое возвращает производную от OrderItemBase.

Возможно ли это, или я должен использовать совершенно другой подход?

1 Ответ

0 голосов
/ 23 апреля 2010

Сразу приходят на ум два варианта:

Первый:

Public MustInherit Class OrderBase
    Public MustOverride Property OrderItem As OrderItemBase
End Class

Public Class WebOrder
    Inherits OrderBase

    Public Overrides Property OrderItem As OrderItemBase
End Class

, что сделает все производные классы свойством типа OrderItemBase (не производным классом OrderItemBase)

Second:

Public MustInherit Class OrderBase(Of TItem As OrderItemBase)
    Public MustOverride Property OrderItem As TItem
End Class

Public Class WebOrder
    Inherits OrderBase(Of WebOrder)

    Public Overrides Property OrderItem As WebOrder
End Class

Обратите внимание, что это меняет иерархию классов так, что для всех ваших заказов не существует единого базового класса.Вам нужно будет сделать любой метод, работающий с классом OrderBase(Of TItem), универсальным.

...