2012-08-02 80 views
6

我找不到使用.Net反射器的这些类型之间的关系。任何想法?哪里知道/检查:Int32继承自ValueType,ValueType继承自Object?

+0

不错的问题,我也很有趣,但我认为你不能在反射器中看到它,因为只有像scruct或enum这样的关键字将类型定义为编译器的值。 – 2012-08-02 07:29:07

+1

@Denis你可以在IL,C#和树上看到它... – 2012-08-02 07:30:49

+0

VS中的对象浏览器也应该给你相同的信息... – 2012-08-02 07:37:03

回答

8

既然你说 “使用.net反射”:

enter image description here

如果你想反思:

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

表示:

System.Int32 
System.ValueType 
System.Object 

,如果你指的是IL:

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

和:

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

(在反射器,选择类型的节点,并选择IL作为视图)

如果你指的是C#视图,则:

public struct Int32 ... 

足够; struct关键字表示:继承自ValueType(虽然不像通常的C#class那样)。 ValueType仍然是一个普通的类,并且具有:

public abstract class ValueType ... 

和往常一样,一个class不指定基型是指:从object继承。

+0

我的意思是C#视图。现在每个人都很清楚。感谢Marc提供了不同的方法,这非常棒。 – user1033098 2012-08-02 07:33:27

+0

+1用于解释不同的可能方式。 – Adil 2012-09-04 06:45:09