.NET对象创建是“除了nihilo”吗?

时间:2012-10-04 19:14:47

标签: .net

我正在阅读有关prototype-based种语言的内容,这种怀疑在我脑海中浮现:

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

2 个答案:

答案 0 :(得分:2)

.Net中最基本的对象没有用户方面的数据,只有一些内部平台有关其类型和实际数据的内存位置的信息。从用户(开发人员)的角度来看,他们“只是存在”而且他们的“身份”只有不同。他们的班级不能以任何方式延伸。我没有看到克隆任何内容的任何意义。

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

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

因此,如果对象创建是以原型克隆方式完成的,那么我会感到非常惊讶。我绝对不确定,但我敢打赌,事实并非如此。我几乎可以肯定,对象创建只是分配小内存块,并且可能在其标题内设置几个指针。

如果有人* ngen *的某些代码并将其反汇编以查看new()运算符的工作方式,那么肯定是可以验证的。)

答案 1 :(得分:2)

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

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