原来总是觉得运行的是程序,看了我老师写的一些反射相关的代码之后,我忽然发现程序本身只是表示计算机运行时需要的按照特定顺序排列的数据和指令的描述,运行的实际上是计算机,不是程序。就像厨师按照菜谱做菜,做菜的是厨师,不是菜谱。反射相关的功能是对程序这个描述内容的信息的获取和对程序这个描述的内容的添加,就像对菜谱内容的描述和添加是类似的,菜谱改了,厨师做的菜就不一样了。当然菜谱本身也提供了修改自身的方法,同时这些修改是由厨师做出来的。就像程序提供了修改自身的方法,同时也是由计算机来修改的程序。
在一个方法里,字段和属性是完全不同的东西,字段Field只是包含了一个对象的地址,但是属性实际上包含了两个方法(SetMethod和GetMethod)的地址,这两个方法的地址都可以为null。