读 你必须知道.NET
第1部分
====================================================================
对象类型,例如整型、字符型等等。当然,分类的标准不同,产生的类别也就不同。但
是常见的分类就是值类型和引用类型两种。其依据是对象在运行时在内存中的位置,值类型位于线程
的堆栈,而引用类型位于托管堆。正如农民可以进城务工,工人也可以回乡务农,值类型和引用类型
的角色也会发生转变,这个过程在面向对象中称为装箱与拆箱。这一点倒是与刚刚的例子很贴切,农
民进城,工人回乡,不都得把行李装进箱子里折腾嘛。
对象的生存环境是CLR,而人的生存环境是社会。CLR提供了对象赖以生存的托管环境,制定一系
列的规则,称之为语法,例如类型、继承、多态、垃圾回收等,在对象世界里建立了真正的法制秩序;
而社会提供了人行走江湖的秩序,例如法律、规范、道德等,帮助我们制约个体,维护社会。
27人类社会就是系统架构,也是分层的。上层建筑代表政治和思想,通过社会契约和法律规范为经济基
础服务,在对象世界中,这被称为接口。面向接口的编程就是以接口方式来抽象变化,从而形成体系。
正如人类以法律手段来维系社会体系的运作和秩序一样。
28由此可见,对象的旅行就是这样一个过程,在一定的约定与规则下,通过方法进行彼此的交互操作,
从而达到改变本身状态的目的。从最简单的方式理解实际情况,这些体会与人的旅程如此接近,给我
们的启示更加感同身受。
访问修饰符访问权限
pubic对访问成员没有限制,属于最高级别访问权限
protected访问包含类或者从包含类派生的类
internal访问仅限于程序集
protected internal访问仅限于从包含类派生的当前程序集或类型。也就是同一个程序集的对象,或者该类及其子类可以访问
private访问仅限于包含类型
internal,具有类比意义的就是internal类似于公司的职能部门的职责,不管是否具有上下级的隶属
关系,人力资源部都能管辖所有其他部门的员工考勤。这是一种横向的职责关系,在面向对象中用来示同一程序集的访问权限,只要是隶属于同一程序集,对象即可访问其属性,而不管是否存在隶属
关系。
些操作将导致对象创建和内存分配的发生,关于实例创建
有多个IL指令解析,主要包括:
?newobj,用于创建引用类型对象。
?ldstr,用于创建string类型对象。
?newarr,用于分配新的数组对象。
?box,在值类型转换为引用类型对象时,将值类型字段拷贝到托管堆上发生的内存分配