2015-02-16 17 views
10

Warum dies funktioniert:Wie kennt GetType() den Typ einer abgeleiteten Klasse?

Object o = "my string"; 
Console.WriteLine(o.GetType()); 

Ausgang:

System.String 

Dieses Gefühl, wenn die Funktion Aufruf der String Klasse geschickt wurde machen würde, aber es hat nicht seit GetType() ist nicht virtuell.

+0

Metadaten. Sie erhalten es nicht mit C# Native. – Aron

+0

Versuchen Sie 'ildasm.exe' zu ​​verwenden –

+4

Sie können sehen: [Was passiert wirklich, wenn Sie GetType() tun?] (Http://stackoverflow.com/questions/3296526/what-does-really-happen-when- you-do-gettype) – Habib

Antwort

3

Der Ausführungszeittyp ist Teil der Daten des Objekts selbst. Es ist fast so, als wäre es ein verstecktes schreibgeschütztes Feld in System.Object, und GetType() gibt nur den Wert dieses Feldes zurück. (Es ist nicht ganz so einfach, aber das ist eine vernünftige Annäherung.)

Beachten Sie, dass diese Informationen notwendig ist, für die CLR wo auszuarbeiten virtuelle Methoden versenden - so, wenn Sie es dachten funktionieren würde, wenn GetType virtuelle waren, fragen selbst, wie die CLR wissen würde, welche Implementierung aufgerufen werden soll.

Verwandte Themen