CLR 要求每个类型最终都要继承自 System.Object 类型

 //隐式继承 Object
class Employee {
...
} //显示继承继承 Object
class Employee : System.Object {
...
}

类型定义(C#)描述

System.object 的公有方法

Equals:如果两个对象具有相同的值,方法返回 true

GetHashCode:方法返回对象的值的散列码。如果一个对象被用作散列表的一个键值,那么该对象的类型应该重写 GetHashCode().

ToString:重写该方法使其返回一个表示对象状态的字符串

GetType:方法返回一个类型为继承自Type的对象实例,其标识了该方法所属对象的类型。返回的 Type 对象可以和反射类一起使用来获得类型的元数据信息。(* GetType 方法是一个非虚方法,这可以防止一个类通过重写该方法而隐藏它的类型,从而破坏类型安全)

System.object 的受保护方法

MemberwiseClone:非虚方法,它创建一个新的实例,并将其字段设置为和this对象的字段相同,最后返回新创建的实例引用。关于该方法的更多信息,请参见

Finalize:虚方法,当垃圾收集器判定某个对象为可回收的垃圾时,垃圾收集器会在对象内存被回收前调用此方法。那些内存回收时需要资源清理的类型应该重写该方法。

CLR 要求所有的对象都要用 new 操作符来创建(产生 newobj IL 指令)。下面的语句展示了怎样创建一个 Employee 对象:

Employee e = new Employee("ConstructorParaml");

下面是 new 操作符所执行的工作:

  1. 从托管堆(managcd heap)中分配中分配指定类型所需的字节来作为存储其对象的内存空间。
  2. 初始化对象的附加成员(overhead members)。每个对象实例都有两个附加成员(管理对象实例)① 指向类型方法表的指针② SyncBlockIndex
  3. 传入 new 操作符中的指定参数(上面例子为"ConstructorParaml"),调用类型的实例构造器,虽然大多数语言在编译构造器是都会要求它们调用基类型中相应的构造器,但CLR本身没有这样的要求

在 new 完成了这些所有操作后,它将返回一个指向新创建对象的引用。在上面的例子中,该引用被保存在变量 e 中,其类型为 Employee。

没有和 new 操作符对应的 delete 操作符。也就是说,在CLR中,我们无法显示释放对象所占用的资源。CLR 引入一种垃圾收集环境来自动检测哪些不再被使用或访问的对象,并自动释放它们的内存。

类型与通用语言运行时:System.Object的更多相关文章

  1. c#通用语言运行时CLR

  2. 动态语言运行时(DLR)

    前言 为了让C#.Visual Basic等.NET编程语言能具备动态编程语言的特性,.NET 4.0引入了一个"DLR(Dynamic Language Runtime:动态语言运行时)& ...

  3. 承载(Host)通用语言执行时

    承载(Host)通用语言执行时(CLR) 还有一种使用COM 的方法是是把须要集成的 F# 代码与已有的 C/C++ 应用程序集成到一起.开成自己定义的承载通用语言执行时.通用语言执行时就是 C++ ...

  4. 第4章 类型基础 -- 4.1 所有类型都从System.Object派生

    4.1 所有类型都从System.Object派生 “运行时”要求每个类型最终都从System.Object类型派生. 由于所有类型最终都从System.Object派生,所以每个类型的每个对象都保证 ...

  5. Dapr 知多少 | 分布式应用运行时

    Intro Dapr 官方团队已于最近(2021.1.17)正式发布Dapr v1.0,Dapr已正式生产可用,可以部署到自托管环境或 Kubernetes 集群.对于绝大多数开发者来说,想必对Dap ...

  6. 4.1 所有类型都从 System.Object 派生

    "运行时"要求各个类型最终都从 System.Object 派生.(显示继承/隐式继承) 提供公共方法(public): Equals 判断两个对象相等,true 表示相等. Ge ...

  7. Java运行时,各种类型存储介绍

    Java的内存分配   Java程序运行时的内存结构分成:方法区.栈内存.堆内存.本地方法栈几种.    方法区    存放装载的类数据信息,包括:基本信息:每个类的全限定名.每个类的直接超类的全限定 ...

  8. NotSupportedException-无法将类型“System.DateTime”强制转换为类型“System.Object”

    几张图就可以说明一切 2015-03-29 21:54:09,206 [77] ERROR log - System.NotSupportedException: 无法将类型“System.DateT ...

  9. 无法将类型“System.Nullable`1”强制转换为类型“System.Object”。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。

    在一个项目中使用LINQ和EF时出现了题目所示的异常,搜索了很多资料都找不到解决办法,主要是因为EF方面的知识欠缺. 先将情况记录如下,以供以后参考. 查询主要设计两张表,由外键关联: 在进行下面的查 ...

随机推荐

  1. [MarsZ]程序猿谈大学之工作三年半的程序猿给大学童鞋的一些注释

    我本不是个喜欢写文章的人,更甭提写这种基本没技术含量的文章了.但是今天上班的时候,不经意浏览了下学校的QQ群,突然很想把自己的经验经历分享给还在大学里的同学,希望能让某些对前途职业迷茫的童鞋有所帮助. ...

  2. HW1.6

    public class Solution { public static void main(String[] args) { System.out.println("1 + 2 + 3 ...

  3. redis在.NET下的使用

    windows SEVER包:http://code.google.com/p/servicestack/wiki/RedisWindowsDownload windows仅用来测试,性能不如在lin ...

  4. 转储指定的数据块并查看TRC信息

    1.转储指定的块:需要两个信息:文件号和块号 BYS@bys1>alter system dump datafile 1 block 100; System altered. 2.定位找出use ...

  5. 如何把jquery 的dialog和ztree结合

    第一步:先准备好juqury-ui.ztree 的js文件和css 文件 第二步:example.jsp文件代码中写 ..引入jqueryui.ztree 的js和css文件 <body> ...

  6. Java 网络编程最佳实践(转载)

    http://yihongwei.com/2015/09/remoting-practice/ Java 网络编程最佳实践 Sep 10, 2015 | [Java, Network] 1. 通信层 ...

  7. Emmet:一个Html/Css快速编辑神器的插件

    一.介绍:Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度 二.使用 ...

  8. 网络爬虫之Windows环境Heritrix3.0配置指南

    一.引言: 最近在忙某个商业银行的项目,需要引入外部互联网数据作为参考,作为技术选型阶段的工作,之前已经确定了中文分词工具,下一个话题就是网络爬虫的选择,目标很明确,需要下载一些财经网站的新闻信息,然 ...

  9. php错误级别

    E_ERROR 致命的运行错误.错误无法恢复,暂停执行脚本. E_WARNING 运行时警告(非致命性错误).非致命的运行错误,脚本执行不会停止. E_PARSE 编译时解析错误.解析错误只由分析器产 ...

  10. background-position也许你没考虑到

    设置背景图片时不知你有没有遇到过背景位置的困扰,有没有深入思考过,background-position到底是什么,下面请各位看看我的理解. 简而言之就一句话,默认图片左上角居元素左上角的坐标,例如: ...