我读到了关于基于原型的语言的文章,我想到了这个疑问:
.NET Object Creation是否允许从头开始创建新对象?或者,.NET对象的创建是基于从现有对象(即对象)克隆作为新对象创建的克隆原型吗?
.Net中最基本的对象没有用户数据,只有一些内部平台关于其类型和实际数据在内存中的位置的信息。从用户(开发人员)的角度来看,它们"只是存在",它们只是在"身份"上有所不同。他们的类不能以任何方式扩展。我认为克隆任何东西都没有任何意义。
更复杂的对象是从某个事物派生出来的,并且最终是从基础对象派生出来的。.Net中没有复制构造,也没有深度复制语义,所以在非基本对象的级别上,克隆任何东西都没有意义。
在元数据级别,每个对象都携带关于它属于哪个类的信息。元信息是共享的,同一类的所有对象都指向共享的元信息。克隆任何东西都没有意义。
因此,如果以原型克隆的方式创建对象,我会感到非常惊讶。我不能完全肯定地知道,但我敢打赌,事实并非如此。我也很确定,对象的创建只是分配一个小内存块,也许在它的头部设置一些指针。
如果有人*ngen*编写了一些代码并对其进行反汇编以查看new()运算符的工作原理,这当然是可以验证的:)
C#不是基于原型的。您不需要现有对象的实例来创建新对象,也不可能像javascript那样"扩展"对象。
因此,原则上,所有的对象都是独立创建的。