Nehmen wir an, ich habe die folgende Klassenhierarchie: TaskViewer
erbt von ListViewer<Task>
, die wiederum von ViewerBase
erbt.Wie spiegelt sich der generische Parameter, der für die Vererbung verwendet wurde
Wenn ich in eine Methode debuggen, die in ViewerBase
deklariert wird und this.GetType()
betrachten, gibt es TaskViewer
korrekt zurück. Ich kann jedoch keine Eigenschaft oder Methode finden, die mir den generischen Parameter zurückgibt, der bei der Vererbung verwendet wurde, d. H. Task
. Offensichtlich, wenn ich im Zusammenhang von TaskViewer
oder ListViewer<T>
wäre, dann würde ich das leicht wissen.
Ich kann sehen, dass es war Task
durch Blick auf die BaseType.FullName
Eigenschaft, aber ich habe durch die Liste und nichts, was ich sehen kann, identifiziert sich als dieses generische Argument verwendet.
Wie kann ich den ursprünglichen generischen Parameter innerhalb dieser Methode in der Stammklasse erhalten?
Oh. Ich habe es versucht und es gab ein leeres Type-Array vorher zurück, daher habe ich diese Frage gestellt. Ein Umbau und plötzlich gibt es den richtigen Typ zurück! – tags2k
Es ist ein modulbasiertes System. In diesem Fall hat also eine von ViewerBase abgeleitete Klasse irgendwo auf ein Attribut einer statischen Methode gezeigt, das sie als Quelle für ihre Optionsliste verwenden möchte, wenn sie bearbeitet wird. Die Optionen hängen davon ab, was T ist, also muss die statische Methode es wissen. Sie können typeof (T) in einem Attribut nicht übergeben, sodass Strings verwendet werden. Ich schrieb den Teil, der sagt "Wenn es ein T in dieser Zeichenfolge gibt, suche diese Klasse und ihre Basisklasse nach generischen Parametern, die in die Option Quellmethode übernommen werden". Wenn es kein T gibt, dann nenne ich einfach die Methode als normal. Hoffe, das scheint nicht zu komisch! :-D – tags2k