Erstens, es scheint, dass Sie die meisten abgeleitet Typ (oder die meisten spezifischen Typ) finden wollen, nicht die allgemeinste Art -, die eher das Gegenteil bedeuten würde (entweder, dass Generika beteiligt sind, oder dass die meisten allgemeine Art gesucht wird).
Während es möglich ist, dies mithilfe von Reflektion zu tun, könnte Ihr Bedarf darauf hinweisen, dass Ihr Klassen-Design falsch oder nicht optimal ist.
Erstens, Konstruktoren sind keine virtuellen Methoden, so dass innerhalb eines Konstruktors (IIRC) der Me
Objektverweis von dem Typ ist, der diesen Konstruktor enthält.
Sie können über alle Assembly Typen reflektieren und finden Sie alle, die von Foo
abgeleitet sind. Sie müssten dann ein Vererbungsdiagramm dieser Typen erstellen und jeder Zahl eine Zahl zuweisen, wie weit sie von Foo
(Anzahl der Vererbungsebenen) abgeleitet ist. Sie könnten dann die Me
Objektreferenz für alle Typen prüfen, die Sie identifiziert haben (sehen Sie, ob Me
für jede von ihnen umgewandelt werden kann), und wählen Sie aus dieser Untergruppe den einen Typ mit der größten Anzahl von Vererbungsstufen aus.
Ich hoffe, dass von diesem werden Sie sehen, dass es die Mühe wahrscheinlich nicht wert ist. Es wäre interessanter und wahrscheinlich hilfreicher, darüber nachzudenken, warum Sie dies tun müssen, und wenn möglich, einen Weg zu finden, dies zu vermeiden.
Sie müssen genauer sein. Was ist mit Typen, die Ihre Klasse in einer anderen Baugruppe erben, von der Sie nichts wissen? Was ist, wenn mehrere Typen auf derselben Vererbungsstufe sind? Wie tief den Baum willst du gehen? – thecoop
Yon wollen den * spezifischen * Typ, nicht generisch ... – Lucero