Considérez la méthode d'extension suivante:VB.NET contraintes et les sous-classes génériques
<Extension()> _
Public Function Satisfies(Of T)(ByVal subject As T, ByVal specification As ISpecification(Of T)) As Boolean
Return specification.IsSatisfiedBy(subject)
End Function
Cela fonctionne comme prévu si le sujet est la classe exacte étant exploité par le cahier des charges. Cependant, si la spécification examine la super-classe de T, cette extension ne fonctionnera pas à moins que le sujet ne soit explicitement converti en super-classe. Est-ce que je peux éviter cela? Jusqu'à présent, le meilleur que je suis en mesure de trouver est:
<Extension()> _
Public Function Satisfies(Of T As Class, K As Class)(ByVal subject As T, ByVal specification As ISpecification(Of K)) As Boolean
Return specification.IsSatisfiedBy(TryCast(subject, K))
End Function
Mais je ne peux pas empêcher de penser qu'il ya une meilleure façon ....
Mise à jour:
Puisqu'il (apparemment) ne peut pas fonctionner comme je le souhaite dans VB.NET en raison de limitations dans le langage lui-même, est-ce que ma deuxième tentative est la plus sûre/efficace?
Merci pour la confirmation, avez mis à jour ma question dans le but d'obtenir une solution de contournement raisonnable pour cette limitation. – DanP