1、本相,起源,最开始的开始,万物的真相
首先告诉大家一点,在天地未分,万象都是混沌的时候,出现的第一个类是什么?CLR要求每一个类都要从System.Object中派生出来,所有的类型都最终继承于System.Object,也就是说System.Object是所有类的爹。
![](https://i-blog.csdnimg.cn/blog_migrate/0af4db9e518f94f7bb58d04c780153df.png)
实际上就是如下
![](https://i-blog.csdnimg.cn/blog_migrate/017ca0fbf23639eca797a2bffedb33a1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7455c23021d5af103932a4b14ecfe895.png)
俺英语也不好,但是俺也能明白大概意思,就是vs会告诉你,你这么做是多余的,憋整那多余的功夫了
因为所有的类都是派生于System.Object,那自然而然的,所有的类不需要任何操作,就将获得最初的四个【新手礼包】即System.Object的四个public方法
Equals
如果两个对象一致,就返回True
GetHashCode
获得对象的哈希码
Tostring
默认的时候是返回类型的完整名称(this.GetType().FullName),但是经常重写该方法来返回包含对象状态表示的String对象。例如Int32和BooLean的tostring
GetType
返回从Type派生的一个类型的实例;这个实例指出调用这个方法的对象是什么类型(描述这个类是个啥东西,反射时候有用)
2、new一个对象的时候发生甚么事了?
clr 要求所有的对象都要用new来创建(废话),但是这个new做了啥,你知道吗?
Student student= new Student();
计算类型以及所有的基类型(将从儿子计算完了,再计算他爹,再是他爷爷,太爷爷……一直到System.Object)的所有的实例的字段所需要的字节数。堆上每个对象呢,都需要额外的成员,包括类型对象指针和同步块索引,CLR利用这些成员管理对象。这些额外的成员的字节也是要计入对象的大小的。
C# CLR via 对象内存中堆的存储【类型对象指针、同步块索引】 - 大稳·杨 - 博客园 (cnblogs.com)