Ignorando el tema del boxeo, todas las clases heredan de tipo objeto. Esto es cierto tanto para los tipos de referencia como para los tipos de valor. GetType muestra el tipo más derivado, que en este caso es System.Int32.
Una de las pocas veces GetType va a volver System.Object es si usted hace esto:
object var = new Object();
Console.WriteLine(var.GetType().ToString());
boxeo, cuando se refiere a un tipo de valor es apuntado por un tipo de referencia. En general esto se hace como referencia de System.Object. TypeOf devolverá el tipo real más derivado, no el tipo de referencia.
class A
{
}
class B : A
{
}
class C : B
{
}
object obj1 = new ClassA();
ClassB obj2 = new ClassB();
ClassB obj3 = new ClassC();
GetType hará cosas similares para estos tipos.
System.Console.WriteLine(obj1.GetType().ToString());
System.Console.WriteLine(obj2.GetType().ToString());
System.Console.WriteLine(obj3.GetType().ToString());
claseA
ClassB
ClassC
@Also OP, ambas Console.WriteLines funcionarían, incluso sin el ToString explícito(): se llamaría implícitamente si su argumento tipo es un Objeto. – Gishu
eliminado saludo: "Gracias de antemano.", También eliminó las palabras ilegales del título: "Pregunta sobre", no hagas eso la próxima vez –