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. 【CSS】Beginner1:Applying CSS

    CSS(Cascading Style Sheets)   1.Applying CSS Three ways: 1.In-line 2.Internal 3.External   2.In-line ...

  2. 洛谷P1189 逃跑的拉尔夫(SEARCH)

    洛谷1189 SEARCH 题目描述 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置. 那个装置太旧了,以至于只能发射关于那辆车的 ...

  3. suse安装软件命令

    zypper se xxxxx 是搜索软件包 zypper in xxxxx 跟apt-get install xxxx等价 zypper rm xxxx 删除 zypper up xxxx 更新软件

  4. 教程-Delphi多线程数据库查询(ADO)

    ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...

  5. redis 操作记录

    cd opt/redis-3.2.1/ cd src ./redis-cli get token:xxx del token:xxx set token:xxx

  6. 如何让2个并列的div根据内容自动保持同等高度

    最近在工作中碰到一个需求: 有左右2个并列的div,2个div都不能限定高度.左div为导航,右div为内容.如何能让左div块自动获得和右div块相等的高度? 同时,也有网友提问到"如果右 ...

  7. Mysql相关问答

    问:我们团队中的一人想要使用 bigint 字段类型来代替 25-30 长度的 varchar 类型来存储 CRC64 数据,然后将索引也改成 bigint 的索引,这会节省索引的空间.请问这否是合理 ...

  8. 找出数组前N大的数

    这个题也是个比较有名的面试题.当然有很多变种. 题目意思基本是:从一个数据量很大的数组里找前N大的元素.不允许排序. 这个题有两个比较好的思路: 思路一:用快速排序的思想,是思想,不是要排序; 思路二 ...

  9. SQL Server2000企业管理器在Win7中新建表错误的解决方法

    Sql Server2000建表错误与解决方法: 在Windwos7中SQL Server 2000企业管理器在新建表时会提示错误,尝试各种方法均告无效,包括升级SP3和SP4,最终发现如下规律可以暂 ...

  10. iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)

    新建一个Category,命名为UIColor+Hex,表示UIColor支持十六进制Hex颜色设置. UIColor+Hex.h文件, #import <UIKit/UIKit.h> # ...