.NET Framework源码研究系列之---万法归宗Object

经过前面三篇关于.NET Framework源码研究系列的随笔,相信大家都发现其实.NET Framework的实现其实并不复杂,也许跟我们自己做的项目开发差不多.本人也是这样的看法.不 过,经过仔细深入的研究,我们还是会发现一下平时很难注意到的东西,而这些东西对我们完善思 路,开阔眼界,锻炼良好的编码素质有着很大的意义.

我们知道.NET中所有的类型(包括:引用类型,值类型)都从Object类派生过来,由此可以说 Object是所有类型的根本.那么今天我们就研究.NET(C#)中一切元素的根本--- System.Object.

Object类在.NET源码中的实现很简单,一共不过100行左右的代码,这也是我们有精力可以仔 细研究它的每一行代码.先看它的定义.

1   [Serializable()]
2   [ClassInterface(ClassInterfaceType.AutoDual)]
3   [System.Runtime.InteropServices.ComVisible(true)]
4   public class Object

由定义来看,Object好像是一个普通的类(莫非Object也从Object派生而来?! ^_^ ).Serializable标签说明了Object可以做序列化反序列化操作.  ClassInterface (ClassInterfaceType.AutoDual),System.Runtime.InteropServices.ComVisible(true) 是.NET为了支持COM特别设计的.除非你要手动包装COM,否则对于绝大部分时间都是用托管代码 而言的人没什么意义.

接下来看它的构造函数:

1     [ReliabilityContract(Consistency.WillNotCorruptState,  Cer.MayFail)]
2     public Object(){ }
3         [ReliabilityContract(Consistency.WillNotCorruptState,  Cer.Success)]
4        ~Object() {}

从上面的代码看到Object只有一个空方法体的构造函数,这就是宇宙起源一样,刚开始什么都 没有.此处要特别说明的是ReliabilityContract标签.ReliabilityContract定义某些代码的作 者和依赖于这些代码的开发人员之间的可协靠性定。这是官方的定义,听起来有些玄 乎.ReliabilityContract有两个属性,分别是两个枚举:Cer和ConsistencyGuarantee.Cer指在受 约束的执行区域内调用时指定方法的行为;ConsistencyGuarantee指可靠性协定。看MSDN对这两 个枚举的说明后,我们发现 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]为Object提供了安全性保证,就是说我们在调用Object构造函数时不管有没有遇 到异常情况,总会获知执行结果.

另外,Object显式定义了析构函数(又是一个不推荐的做法,微软好像很喜欢做的不推荐我们 做的@_@||),让我们能够手动释放对象占用的资源而不需要等到GC自动释放.

要特别说明的是,这里有个我们很少遇到的一个概念:CER,即受约束的执行区域 , 是创作可 靠托管代码的机制的一部分。CER 定义一个区域,在该区域中公共语言运行库 (CLR) 会受到约 束,不能引发可使区域中的代码无法完全执行的带外异常。在该区域中,用户代码受到约束, 不能执行会导致引发带外异常的代码。

时间: 2024-10-22 01:20:03

.NET Framework源码研究系列之---万法归宗Object的相关文章

.NET Framework源码研究系列之---ArrayList与LinkedList

在上一篇<.NET Framework源码研究系列之---马甲List>中我们一起研究了.NET中 List的源代码,也得到一些兄弟的热心反馈.其中一位仁兄说希望看到ArrayList与LinkedList源 代码,所以今天就以此为话题,大家一起看一下.NET中是如何实现ArrayList和LinkedList 的. 我们先看ArrayList和LinkedList在.NET中的位置,ArrayList的命名空间是 System.Collections,LinkedList的命名空间是Syst

.NET Framework源码研究系列之---马甲List

在上一篇随笔<.NET Framework源码研究系列之---Delegate>中我们一起研究了.NET 中是如何实现委托的.今天我们一起研究一下.NET中我们用的最多的一个集合类之一List. 大家都知道,在.NET集合类中List如Array一样都是一个顺序一维数组,与Array不同的是,我 们可以更方便的操作List类型的集合,比如插入数据,删除数据,排序等等,那么.NET源码中List 是如何实现的呢?我们在使用List相对Array的优点时会不会有其他方面的代价呢?从List的源码

.NET Framework源码研究系列之---Delegate

曾几何时能看到微软产品的源码简直是天方夜谭,不过现在这却成了现实,微软终于对外开放 了它的产品的源代码.抛去开源运动与微软之间的世代情仇,抛去微软这一做法的初衷,这总归是 件好事,能够让我们拨开云雾,一窥优秀产品的秘密. 前两天看到有位仁兄在随笔中的留言,说他以为".NET中的设计模式"是在讲.NET Framework 与设计模式的关系,其实不是,不过这也让我想起来自己确实研究过.NET Framework的源码,于是 就找打算找时间把自己的心得体会拿出来和大家一起分享. 今天就先从

一起谈.NET技术,.NET Framework源码研究系列之---Delegate

前言 曾几何时能看到微软产品的源码简直是天方夜谭,不过现在这却成了现实,微软终于对外开放了它的产品的源代码.抛去开源运动与微软之间的世代情仇,抛去微软这一做法的初衷,这总归是件好事,能够让我们拨开云雾,一窥优秀产品的秘密. 前两天看到有位仁兄在随笔中的留言,说他以为".NET中的设计模式"是在讲.NET Framework与设计模式的关系,其实不是,不过这也让我想起来自己确实研究过.NET Framework的源码,于是就找打算找时间把自己的心得体会拿出来和大家一起分享. 今天就先从最

ZooKeeper源码研究系列(1)源码环境搭建

1 系列目录 ZooKeeper源码研究系列(1)源码环境搭建 ZooKeeper源码研究系列(2)客户端创建连接过程分析 ZooKeeper源码研究系列(3)单机版服务器介绍 ZooKeeper源码研究系列(4)集群版服务器介绍 2 搭建步骤 2.1 到github中fork该项目 项目地址 https://github.com/apache/zookeeper.fork完成之后就存至自己的仓库中了. 2.2 clone上述自己的仓库地址到本地 先看下大体的代码格式: 2.3 使用ant对源码

ZooKeeper源码研究系列(2)客户端创建连接过程分析

1 系列目录 ZooKeeper源码研究系列(1)源码环境搭建 ZooKeeper源码研究系列(2)客户端创建连接过程分析 ZooKeeper源码研究系列(3)单机版服务器介绍 ZooKeeper源码研究系列(4)集群版服务器介绍 2 客户端API简单使用 2.1 demo案例1 一个最简单的demo如下: public class ZookeeperConstructorSimple implements Watcher{ private static CountDownLatch conne

ZooKeeper源码研究系列(3)单机版服务器介绍

1 系列目录 ZooKeeper源码研究系列(1)源码环境搭建 ZooKeeper源码研究系列(2)客户端创建连接过程分析 ZooKeeper源码研究系列(3)单机版服务器介绍 ZooKeeper源码研究系列(4)集群版服务器介绍 2 单机版服务器启动方式 单机版的服务器启动,使用ZooKeeperServerMain的main函数来启动,参数分为两种: 只有一个参数:表示为一个配置文件地址 有2~4个参数:分别表示端口.dataDir.tickTime.maxClientCnxns 详细介绍见

ZooKeeper源码研究系列(4)集群版服务器介绍

1 系列目录 ZooKeeper源码研究系列(1)源码环境搭建 ZooKeeper源码研究系列(2)客户端创建连接过程分析 ZooKeeper源码研究系列(3)单机版服务器介绍 ZooKeeper源码研究系列(4)集群版服务器介绍 2 集群版服务器启动过程 启动类是org.apache.zookeeper.server.quorum.QuorumPeerMain,启动参数就是配置文件的地址 2.1 配置文件说明 来看下一个简单的配置文件内容: tickTime=4000 initLimit=10

ZooKeeper源码研究系列(5)集群版建立连接过程

1 系列目录 ZooKeeper源码研究系列(1)源码环境搭建 ZooKeeper源码研究系列(2)客户端创建连接过程分析 ZooKeeper源码研究系列(3)单机版服务器介绍 ZooKeeper源码研究系列(4)集群版服务器介绍 2 各服务器角色的请求处理器链 先介绍下Leader.Follower.Observer服务器的请求处理器链 2.1 Leader服务器 PrepRequestProcessor->ProposalRequestProcessor->CommitProcessor-