11

我正在阅读基于原型的语言,我想到了这个疑问:

.NET Object Creation ex nihilo(“从无到有”)是否允许从头开始创建新对象?或者,.NET 对象创建是基于从现有对象(即Object)的克隆作为新对象创建的克隆原型?

4

2 回答 2

2

.Net 中最基本的对象没有用户数据,只有一些内部平台有关其类型和实际数据在内存中位置的信息。从用户(开发人员)的角度来看,他们“只是存在”,他们只是在“身份”上有所不同。他们的课程不能以任何方式扩展。我认为克隆任何东西没有任何意义。

更复杂的对象是从某物派生出来的,最终是从基础对象派生出来的。.Net 中没有复制构造和深度复制语义,因此在非基本对象级别,克隆任何东西仍然没有意义。

在元数据级别,每个对象都携带有关它属于哪个类的信息。元信息是共享的,同一类的所有对象都指向共享的元信息。克隆任何东西仍然没有意义。

因此,如果对象创建是以原型克隆方式完成的,我会感到非常惊讶。我不能绝对肯定地知道,但我敢打赌它不是。我也很确定对象创建只是分配小内存块,并且可能在其标头内设置一些指针。

如果有人 * ngen * s 一些代码并将其反汇编以查看 new() 运算符的工作原理,那当然是可验证的 :)

于 2012-10-04T19:20:04.680 回答
2

C# 不是基于原型的。您不需要现有对象的实例来创建新对象,也不可能像 javascript 那样“扩展”对象。

因此,原则上,所有对象都是从无中创建的。

于 2012-10-04T19:43:03.943 回答