2012-08-02 18 views
6

Ich kann die Beziehungen zwischen diesen Typen nicht finden mit. NET-Reflektor. Irgendeine Idee?Woher wissen/prüfen: Int32 erbt von ValueType, ValueType erbt von Object?

+0

Schöne Frage, ich bin auch interessant, aber ich denke, Sie können es nicht in Reflektor sehen, weil nur Schlüsselwörter wie scruct oder enum Typ als Wert für den Compiler definiert. –

+1

@Denis können Sie es in der IL sehen, die C# und der Baum ... –

+0

der Objekt-Browser in VS sollte Ihnen auch die gleiche Information geben ... –

Antwort

8

Da Sie "mit .Net Reflektor" sagen:

enter image description here

Wenn Sie wollten Reflexion:

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

, die zeigt:

System.Int32 
System.ValueType 
System.Object 

und wenn Sie die mittlere IL:

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

und:

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

(im Reflektor, die Knoten des Typs und wählen IL als view)

Wenn Sie die C# Ansicht bedeuten, dann:

public struct Int32 ... 

ist genug; Das struct Schlüsselwort bedeutet: erbt von ValueType (obwohl nicht ganz in der üblichen C# class Weg). ValueType bleibt eine Regelklasse und verfügt über:

public abstract class ValueType ... 

und wie üblich, ein class, die keinen Basistyp bedeutet nicht angibt: erbt von object.

+0

ich meine die C# -Ansicht. Alles ist jetzt klar. Danke Marc für die verschiedenen Ansätze, die großartig sind. – user1033098

+0

+1 für die Erklärung verschiedener Möglichkeiten. – Adil