Frage

Ich habe den folgenden Code:

object var3 = 3;
Console.WriteLine(var3.GetType().ToString());
Console.WriteLine(typeof(object).ToString());

Die Ausgabe lautet:

System.Int32
System.Object

Warum sind sie nicht beide System.Object?

War es hilfreich?

Lösung

Wenn Sie sich fragen, warum die boxedObject.GetType () nicht Gegenstand zurückkehren .. Besuche das Bild unter dem Abschnitt 'Boxen Conversion' auf MSDN Boxen und Unboxing . Gute Frage btw .. atleast mein Verständnis für Ihre Frage.

Obwohl ich nicht technisch korrekt sein mag, es sieht aus wie

  • Wenn auf die Halde bewegt, wird ein neues Objekt erstellt - seine Art Zeiger Satz hängt vom jeweiligen Original-Objekt Werttyp (hier System.Int32). Dies erklärt GetType () (und auch der Fehler, wenn Sie versuchen, es auf eine andere Art zu unbox).
  • Der tatsächliche Wert wird dann in dieses Objekt kopiert.

Andere Tipps

Die GetType() Funktion liefert den aktuellen Typen der Instanz in den Variablen.

Auch wenn Ihre Variable als object deklariert wird, ist es eigentlich halten eine Box Int32 Instanz.

Das Ignorieren des Themas des Boxens, erbten alle Klassen vom Typ Objekt. Dies ist für beide Referenztypen und Werttypen wahr. GetType zeigt den am meisten abgeleiteten Typen, der in diesem Fall ist System.Int32.

Eines der wenigen Male GetType wird System.Object zurückgeben, wenn Sie dies tun:

object var = new Object();
Console.WriteLine(var.GetType().ToString());

Boxen beziehen sich auf, wenn ein Werttyp durch einen Referenztyp gerichtet ist. Im Allgemeinen wird dies als System.Object Referenz getan. TypeOf die meisten abgeleiteten tatsächlichen Typ zurückgeben, nicht der Referenztyp.

class A
{
}

class B : A
{
}

class C : B
{
}

object obj1 = new ClassA();
ClassB obj2 = new ClassB();
ClassB obj3 = new ClassC();

GetType wird für diese Arten ähnliche Dinge tun.

System.Console.WriteLine(obj1.GetType().ToString());
System.Console.WriteLine(obj2.GetType().ToString());
System.Console.WriteLine(obj3.GetType().ToString());
  

KlasseA
ClassB
ClassC

Das ist nicht wirklich über das Boxen; dies ist über das Verhalten von GetType. Es gibt den Typ des Wert der Variablen, nicht der Typ der Variable war erklärt mit:

    object var4 = new List<string>();
    Console.WriteLine(var4.GetType().ToString());

wird nicht System.Object entweder zurück.

Erklärungen Variable ist der Kompilierung nur Informationen während Methodenausführung Laufzeit ist. Mit anderen Worten gibt es keine Möglichkeit GetType () wissen kann, was den Objekttyp wurde erklärt, da es nur den tatsächlichen Typ des Objekts zur Laufzeit kennen kann.

ähnlich, wenn Sie hatte

class a
{
}

class b : a

a bInstance = new b();
bInstance.GetType();

der Aufruf von bInstance.GetType () haben keine Möglichkeit zu wissen, dass die Variable als Typ deklariert wurde ‚a‘ und ich glaube nicht, dass Sie es erwarten, zurückzukehren ‚a‘ in diesem Fall auch nicht. Jedoch in dem obigen Beispiel eine ist meine Abkürzung von Objekt und b wird für System.Int32

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top