.NET中的类型对象

.NET中的任何类型,都有对应的一个类型对象。类型对象和类型实例(类型创建的一个对象)不是同一个概念。

类型对象包含类型的静态字段和方法,当类访问静态方法静态字段,实例调用方法时就会去类型对象中查找静态字段和方法

假设有一个类型叫Animal 那么当我们使用它之前CLR就会创建一个特殊的对象叫类型对象

Animal a1 = new Animal();
a1.Eat() //这里访问Eat方法,会先去Animal的类型对象中查找Eat方法,
            //如果之前还没有调用过该方法,那么会先将Eat方法编译成本机代码(已经编译过就不用了)
Animal.Search("老虎") //这边访问静态方法,也是同上面的原理

类型对象可以通过调用GetType()来访问

通过上面我们知道相同类型的类型对象都是同一个也就是说

new Animal().GetType()==new Animal().GetType()//true

那么类型类型对象本身的类型对象又是什么呢,它其实是Type对象,换句话说任何对象的类型对象的类型对象都是同一个,它自己的类型对象时它本身

new People().GetType().GetType()==new Clothes().GetType().GetType()//true
原文地址:https://www.cnblogs.com/fuyun2000/p/3430435.html