• "运行时"要求各个类型最终都从 System.Object 派生。(显示继承/隐式继承)
  • 提供公共方法(public):
    • Equals 判断两个对象相等,true 表示相等。
    • GetHashCode 返回对象的哈希值。
    • ToString 默认返回类型的完整名称(this.GetType().FullName
    • GetType 返回 Type 派生的一个类型实例,指出对象的类型,返回的 Type 对象可以与反射类配合,获取与对象类型相关的元数据信息。GetType 为非虚方法,防止子类重写,隐瞒其类型,破坏安全性。
  • 提供受保护方法(protected):
    • MemberwiseClone MemberwiseClone方法创建的新对象,然后将当前对象的非静态字段复制到新的对象创建的浅表副本。 如果字段是值类型,则执行字段的按位复制。 如果字段是引用类型,引用将复制。(MSDN)
    • Finalize 垃圾回收判断应被回收之后,对象内存被实际回收之前,会调用该虚方法。
  • new 操作符创建对象时所作的操作:
    1. 计算类型及其所有基类型(直到 System.Object,尽管它没有定义自己的实例字段)中定义的所有实例字段需要的字节数。每个对象在堆上都需要一些额外成员—— type object pointer(类型对象指针)和 sync block index (同步块索引)——来管理对象。这些额外成员的字节要计入对象大小。
    2. 从托管堆中分配类型需要的字节数,从而为对象分配内存,所有的字节都设置为0。
    3. 初始化对象的 type object pointer 和 sync block index 成员。
    4. 调用实例的构造方法,并传递 new 调用中指定的实参。大多数编译器都在构造函数中自动生成代码来调用积累的构造函数。每个类型的构造函数第一反应则初始化该类型定义的实例字段。
  • 没有 delete 操作符,没有办法显示的释放对象分配的内存。CLR 通过垃圾回收机制来自动释放内存。


  • Object 还提供两个静态方法:

    • Equal(Object, Object) 判断两个对象相等。

      静态 Equals(Object, Object) 方法指示两个对象,objA 和 objB,是否相等。 它还使您能够值是相等的 null 的测试对象。 它将 objA 和objB 相等的如下:

      • 它确定两个对象是否表示同一对象引用。 如果参数,则方法返回 true。 此测试具有名为 ReferenceEquals 方法等效。 此外,在中,如果 objA 和 objB 是 null,该方法返回 true。
      • 它确定 objA 或 objB 是否 null。 如果是这样,则返回 false。
      • 如果两个对象不表示同一对象引用,且均不为 null,它调用 objA。Equals(objB)和返回结果。 这意味着,如果 objA 重写 Equals(Object) 方法,该重写调用。
    • ReferenceEquals 确定指定的 Object 实例是否是相同的实例。

      不像 Equals 方法和相等运算符,ReferenceEquals 方法不能被重写。 为此,如果要测试两个对象引用的平等,且不确定 Equals 方法的实现时,可以调用 ReferenceEquals 方法。 但是,请注意,如果 objA 和 objB 是值类型,则它们先装箱,然后传递给 ReferenceEquals 方法。

4.1 所有类型都从 System.Object 派生的更多相关文章

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

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

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

  3. c# 所有类型都是从object继承,那么值类型默认也有装箱吗?

    我们知道,c#所有类型都是从System.Object继承,int等值类型也逃脱不了这种命运,那难道值类型默认有装箱操作吗?答案是否,在CLR via这本书中有简短的解释说明: 1.值类型从Syste ...

  4. c# System.Object类和数据的安全转型

    .NET Fraework 最重要的引用类型之一是System命名空间中Object类.所有的类都是System.Object的派生类.System.Object类型的变量System.Object的 ...

  5. 类型与通用语言运行时:System.Object

    CLR 要求每个类型最终都要继承自 System.Object 类型 //隐式继承 Object class Employee { ... } //显示继承继承 Object class Employ ...

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

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

  7. .NET基础 (11)类型的基类System.Object

    类型的基类System.Object1 是否存在不继承自System.Object类型的类2 在System.Object中定义的三个比较方法有何异同3 如何重写GetHashCode方法 类型的基类 ...

  8. Entity FreamWork 无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型错误解决

    Entity FreamWork 无法创建“System.Object”类型的常量值.此上下文仅支持基元类型或枚举类型错误解决: 最近在开发中把我原来抄的架构里面的主键由固定的Guid改成了可以泛型指 ...

  9. 无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型

    Entity FreamWork 无法创建“System.Object”类型的常量值.此上下文仅支持基元类型或枚举类型错误解决: 最近在开发中把我原来抄的架构里面的主键由固定的Guid改成了可以泛型指 ...

随机推荐

  1. vlc源码分析(五) 流媒体的音视频同步

    vlc播放流媒体时实现音视频同步,简单来说就是发送方发送的RTP包带有时间戳,接收方根据此时间戳不断校正本地时钟,播放音视频时根据本地时钟进行同步播放.首先了解两个概念:stream clock和sy ...

  2. Maven创建Web项目、、、整合SSM框架

    自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...

  3. Linux环境下部署SpringBoot项目

    1.在pom文件中添加maven插件 <build> <plugins> <plugin> <groupid>org.springframework.b ...

  4. 分布式消息通信ActiveMQ

    消息中间件 消息中间件是指利用高效可靠的消息传递机制进行平台无关的数据交流,并且基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,可以在分布式架构下扩展进程之间的通信. 消息中间件能 ...

  5. 12c数据库重启后自动启动pdb

    由于最近管理12c数据库,创建了9个新的pdb.相对于以前11g版本每天一个一个的环境检查,方便了很多. 但是因为一次意外宕机,数据库重启.虽然数据库重启,但是管理的pdb确不能自动重启,所以需要手动 ...

  6. TopJUI Combobox 联动

    这里给联动进行一个简单定义:因Combobox选择或输入的值发生改变时对自身或者其它组件产生影响称为联动.(注:editable确定是否可以手动输入) 有两种实现方法: 一.自己写对应的onChang ...

  7. MVC和MVT的区别

    首先,MVC和MVT是框架式不是设计模式. 框架与设计模式虽然相似,但却有着根本的不同.设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象:框架可以用代码表示,也能直接执 ...

  8. Ubuntu 16 Java Develop环境快速搭建

    安装JDK 1. 更新apt-get: $ sudo apt-get update 2. 安装jdk: $ sudo apt-get install openjdk-8-jdk 部分eclipse现只 ...

  9. MongoDB DBA 实践7-----MongoDB的分片集群操

    一.使用Ranged Sharding对集合进行分片 从mongo连接到的shell中mongos,使用该sh.shardCollection()方法对集合进行分片. 注意: 必须已为集合所在的数据库 ...

  10. TP框架图片压缩/上传

    <-- 在前端的代码 --><form action="{:url('index/user/personal')}" method="post" ...