我正在阅读有关基于原型的语言,这种怀疑在我脑海中浮现:
.NET对象创建是否为nihilo("从无到有"),因此允许从头开始创建新对象?或者,是基于从现有对象(即Object)克隆的.NET对象创建作为新对象创建的克隆原型?
.Net 中最基本的对象没有用户数据,只有一些内部平台的有关其类型和实际数据在内存中位置的信息。从用户(开发人员)的角度来看,它们“只是存在”,只是“身份”不同。他们的班级不能以任何方式延长。我不认为克隆任何东西有任何意义。
更复杂的对象是从某些东西派生出来的,并且最终是从基础对象派生出来的。.Net 中没有复制构造,也没有深度复制语义,因此在非基本对象级别上,克隆任何东西仍然没有意义。
在元数据级别,每个对象都携带有关它所属类的信息。元信息是共享的,同一类的所有对象都指向共享的元信息。克隆任何东西仍然没有意义。
因此,如果对象创建是以原型克隆方式完成的,我会感到非常惊讶。我不能绝对确定,但我敢打赌事实并非如此。我几乎可以肯定,对象创建只是分配小内存块,并且可能在其标头内设置一些指针。
如果有人 * ngen * s 一些代码并反汇编它以查看 new() 运算符如何工作,这当然是可以验证的:)