2010-04-22 4 views
0

VB.NET 2008 .NET 3.5Est-il possible de spécifier un type de retour de "Derivative (of T)" pour un sous-élément MustOverride dans VB.NET?

J'ai deux classes de base qui sont MustInherit (partiel). Appelons une classe OrderBase et l'autre OrderItemBase.

Un type spécifique de commande et d'article de commande hériterait de ces classes. Appelons ces WebOrder (hérite de OrderBase) et WebOrderItem (hérite de OrderItemBase).

Maintenant, dans le grand schéma des choses WebOrder est une classe composite contenant un WebOrderItem, comme ceci:

Public Class WebOrder 
    Inherits OrderBase 

    Public Property OrderItem() as WebOrderItem 
    End Property 

End Class 

Public Class WebOrderItem 
    Inherits OrderItemBase 
End Class 

Afin de vous assurer que toute classe qui dérive de OrderBase a la propriété OrderItem, je voudrais de faire quelque chose comme ça dans la classe OrderBase:

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

en d'autres termes, je veux que la classe dérivée d'être forcé de contenir une propriété qui retourne un dérivé de OrderItemBase. Est-ce possible, ou devrais-je utiliser une approche entièrement différente?

Répondre

0

Deux options viennent à l'esprit immédiatement:

Première:

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 

qui fera toutes les classes dérivées ont une propriété de type OrderItemBase (pas une classe dérivée de OrderItemBase)

Deuxième:

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 

Notez que cela modifie la hiérarchie des classes y telle qu'il n'y a pas de classe de base unique pour tous vos ordres. Vous devrez faire toute méthode qui fonctionne sur la classe générique OrderBase(Of TItem).

+0

Gideon, Votre deuxième solution est en fait celle que j'ai imaginée seule. Je travaille vraiment très bien pour ma situation. –

Questions connexes