VB.Net2005Les paramètres de type ne peuvent pas être utilisés comme qualificatifs
Code simplifié:
MustInherit Class InnerBase(Of Inheritor)
End Class
MustInherit Class OuterBase(Of Inheritor)
Class Inner
Inherits InnerBase(Of Inner)
End Class
End Class
Class ChildClass
Inherits OuterBase(Of ChildClass)
End Class
Class ChildClassTwo
Inherits OuterBase(Of ChildClassTwo)
End Class
MustInherit Class CollectionClass(Of _
Inheritor As CollectionClass(Of Inheritor, Member), _
Member As OuterBase(Of Member))
Dim fails As Member.Inner ' Type parameter cannot be used as qualifier
Dim works As New ChildClass.Inner
Dim failsAsExpected As ChildClassTwo.Inner = works ' type conversion failure
End Class
Le message d'erreur sur la ligne "échoue" est dans le sujet, et "Member.Inner" est mis en surbrillance. Incidemment, la même erreur se produit en essayant d'appeler une méthode partagée de OuterBase. La ligne "works" fonctionne, mais il y a une douzaine (et en comptant) les classes ChildClass dans la vie réelle.
La ligne "failsAsExpected" est là pour montrer que, avec les génériques, chaque ChildClass a sa propre classe Inner distincte.
Ma question: existe-t-il un moyen d'obtenir une variable, dans la classe CollectionClass, définie comme type Member.Inner? Quelle est la différence critique que le compilateur ne peut pas suivre?
(je finalement en mesure de générer un objet en créant un objet factice de type et d'appeler param une méthode définie dans OuterBase. Pas l'approche plus propre.)
Modifier le code 02/12/2008 modifié pour rendre la deux classes "base" génériques.
Bien sûr, vous avez raison. D'une certaine manière, j'ai mal interprété le code pensant OuterBase était générique - en faisant ChildClass: OuterBase + InnerClass différent de OtherChildClass: OuterBase
+ InnerClass. –