最近研究C#中的Type是什么,不得已找到了微软公开的ROTOR代码,分析半天还是一头雾水。System.Type类中包含了System.Reflection.FieldInfo类型的数据,FieldInfo继承自System.Reflection.MemberInfo类,本以为MemberInfo的父类是Object就到头了,可一看代码才发现MemberInfo中居然包含有Type类型的数据!
于是产生一个问题:到底是先有鸡还是先有蛋?看下面的代码:
using System;
![](/Images/OutliningIndicators/None.gif)
class Client
{
public static void Main ()
{
Base b = new Base();
Derived d = new Derived();
b.d = d;
Console.WriteLine(b.d.m);
}
}
![](/Images/OutliningIndicators/None.gif)
class Base
{
public int n = 9;
public Derived d;
}
![](/Images/OutliningIndicators/None.gif)
class Derived : Base
{
public int m = 10;
}
Derived继承自Base,可以说没有Base就没有Derived,可Base里面有一个成员是Derived类型。这个程序可以正常编译执行并打印结果10。始终想不明白。
我感觉程序在编译时,先生成Type信息,然后再进一步处理,这由绕到了原来的问题,什么是Type呢?
于是产生一个问题:到底是先有鸡还是先有蛋?看下面的代码:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
Derived继承自Base,可以说没有Base就没有Derived,可Base里面有一个成员是Derived类型。这个程序可以正常编译执行并打印结果10。始终想不明白。
我感觉程序在编译时,先生成Type信息,然后再进一步处理,这由绕到了原来的问题,什么是Type呢?