Ich habe den folgenden Code:
%Vor%Die Ausgabe ist:
%Vor% Warum sind das nicht beide System.Object
?
Wenn Sie fragen, warum boxedObject.GetType () Object nicht zurückgibt. Sehen Sie sich das Bild im Abschnitt "Boxing Conversion" auf der MSDN Boxing und Unboxing Seite . Gute Frage übrigens ... zumindest mein Verständnis für deine Frage.
Obwohl ich technisch nicht korrekt bin, sieht es wie
ausWenn Sie das Thema Boxen ignorieren, erben alle Klassen vom Typ Objekt. Dies gilt sowohl für Referenztypen als auch für Werttypen. GetType zeigt den am weitesten abgeleiteten Typ, in diesem Fall System.Int32.
Einer der wenigen Male, die GetType System.Object zurückgeben wird, wenn Sie dies tun:
%Vor%Boxen bezieht sich darauf, wenn auf einen Wertetyp durch einen Referenztyp verwiesen wird. Im Allgemeinen wird dies als eine System.Object-Referenz ausgeführt. TypeOf gibt den am meisten abgeleiteten tatsächlichen Typ zurück, nicht den Referenztyp.
%Vor%GetType wird ähnliche Dinge für diese Typen tun.
%Vor%KlasseA
KlasseB
KlasseC
Deklarationen der Variablen sind nur Informationen zur Kompilierzeit, während die Ausführung der Methode die Laufzeit ist. Mit anderen Worten, GetType () kann nicht wissen, welchen Typ das Objekt deklariert hat, da es nur den tatsächlichen Typ des Objekts zur Laufzeit kennen kann.
ähnlich, wenn Sie
hatten %Vor%Der Aufruf von bInstance.GetType () kann nicht wissen, dass die Variable als Typ 'a' deklariert wurde und ich denke nicht, dass Sie erwarten, dass sie auch in diesem Fall 'a' zurückgibt. Im obigen Beispiel ist jedoch a meine Abkürzung für Objekt und b ist für System.Int32