重学C#-类型基础-所有的类型都从System.Object派生

所有的类型都从 System.Object 派生

“运行时”要求每个类型最终都从System.Object类型派生。
以下两个定义完全一致

1
2
3
4
5
6
7
8
9
// 隐式派生于 System.Object
class Employee{
...
}

// 显式派生于 System.Object
class Employee : System.Object{
...
}

由于所有的类型都从System.Object中派生,所以每个类型都保证了一组最基本的方法。

  1. 公共方法
    • Equals
    • GetHashCode
    • ToString
    • GetType
  2. 收到保护方法
    • MemberwiseClose
    • Finalize
      CLR 要求所有的对象都用 new 操作符创建
      1
      Employee e = new Employee("Parama");
      new 操作符会做以下事情
    1. 计算类型及其所有的基类(一直到System.Object)和”同步块索引”.
    2. 从托管堆中分配类型所需要的字节数,从而分配对象的内存,分配的所有字节都设为0
    3. 初始化对象的”类型对象指针” 和 “同步块索引” 成员
    4. 调用类型的实例构造器,传递在 new 调用中指定的实参(上述中的 “Parama”),每个类型的构造器负责初始化该类型定义的实例字段,最终调用 System.Object 的构造器(该构造器什么都不做,简单的返回)。
      new 执行了所有操作后,返回指向新建对象的一个引用(或指针)。

重学C#-类型基础-所有的类型都从System.Object派生
https://mufengbufeng.github.io/2025/03/16/类型基础-所有的类型都从Object派生/
作者
SuHang
发布于
2025年3月16日
许可协议