2012-08-02 13 views
6

No puedo encontrar las relaciones entre estos tipos usando .Net reflector. ¿Alguna idea?Dónde saber/comprobar: Int32 hereda de ValueType, ValueType hereda de Object?

+0

Una buena pregunta, soy interesante también, pero creo que no se puede ver en el reflector porque solo las palabras clave como scruct o enum definen el tipo como valor para el compilador. –

+1

@Denis puede verlo en IL, C# y el árbol ... –

+0

el buscador de objetos en VS también debería darle la misma información ... –

Respuesta

8

Dado que usted dice "usando .Net reflector":

enter image description here

Si quería reflexión:

Type type = typeof (int); 
while(type != null) 
{ 
    Console.WriteLine(type.FullName); 
    type = type.BaseType; 
} 

que muestra:

System.Int32 
System.ValueType 
System.Object 

y si se refiere a la IL:

.class public sequential ansi serializable sealed beforefieldinit Int32 
    extends System.ValueType 

y:

.class public abstract auto ansi serializable beforefieldinit ValueType 
    extends System.Object 

(en el reflector, seleccione el nodo del tipo y seleccione IL como la vista)

Si se refiere a la # vista C, entonces:

public struct Int32 ... 

es suficiente; la palabra clave structsignifica: hereda de ValueType (aunque no del todo en el modo habitual C# class). ValueType sigue siendo una clase regular, y tiene:

public abstract class ValueType ... 

y como de costumbre, una class que no especifica un tipo de base significa: hereda de object.

+0

Me refiero a la vista C#. Todo está claro ahora. Gracias Marc por dar diferentes enfoques, que es genial. – user1033098

+0

+1 para explicar diferentes formas posibles. – Adil

Cuestiones relacionadas