D'abord, il semble que vous voulez trouver le plus dérivé de type (ou le plus type spécifique), pas le type le plus générique - qui signifierait plutôt le contraire (non plus, que les médicaments génériques sont impliqués, ou que le type général est recherché).
Bien qu'il soit possible de le faire en utilisant la réflexion, votre besoin pour cela peut indiquer que votre conception de classe est incorrecte ou moins qu'optimale. D'abord, les constructeurs ne sont pas des méthodes virtuelles, donc dans un constructeur (IIRC), la référence d'objet Me
est du type qui contient ce constructeur.
Ce que vous pouvez faire est de refléter tous les types d'un assemblage et de trouver tous ceux qui sont dérivés de Foo
. Vous devrez alors construire un graphe d'héritage de ces types et assigner un nombre à chaque énonciation jusqu'à quel point il est dérivé de Foo
(nombre de niveaux d'héritage). Vous pouvez ensuite vérifier la référence d'objet Me
par rapport à tous les types que vous avez identifiés (voir si Me
peut être castée dans chacun d'entre eux), et à partir de ce sous-ensemble, choisissez le type avec le plus grand nombre de niveaux d'héritage.
J'espère que de cela, vous verrez que cela ne vaut probablement pas la peine. Il serait plus intéressant, et probablement plus utile, de repenser la raison pour laquelle vous devez le faire et, si possible, de trouver un moyen de l'éviter.
Vous devez être plus précis. Qu'en est-il des types héritant de votre classe dans une autre assemblée que vous ne connaissez pas? Que faire s'il y a plusieurs types au même niveau d'héritage? À quelle profondeur voulez-vous aller? – thecoop
Vous voulez le type le plus * spécifique, non générique ... – Lucero