2012-10-04 14 views
11

que estaba leyendo sobre prototype-based idiomas y esta duda viene a la mente:¿Es .NET Object Creation "ex nihilo"?

Es .NET Creación de objetos ex nihilo ("de la nada") y así permitir que los nuevos objetos que se creen a partir de cero? O, en su lugar, ¿la creación de objetos .NET se basa en la clonación de un objeto existente (es decir, Object) como el prototipo de clonación para nuevas creaciones de objetos?

+4

+1 por usar sweet latin :) – RedFilter

+2

+1 por pregunta poco común e interesante – quetzalcoatl

+0

@RedFilter: ¿Qué sabor o sabor son amargos? – BoltClock

Respuesta

2

Los objetos más básicos en .Net no tienen datos de usuario, solo información de la plataforma interna sobre su tipo y la ubicación en memoria de sus datos reales. Desde el punto de vista del usuario (desarrollador), 'solo existen' y solo difieren en su 'identidad'. Su clase no se puede extender de ninguna manera. No veo ningún sentido clonar nada.

Los objetos más complicados se derivan de algo y, en última instancia, se derivan del objeto base. No hay construcción de copias ni semántica de copia profunda en .Net, por lo que a nivel de objetos no básicos, no tiene sentido clonar nada.

En el nivel de metadatos, cada objeto lleva información sobre a qué clase (s) pertenece. La metainformación se comparte y todos los objetos de la misma clase solo apuntan a la metainformación compartida. Todavía no tiene sentido clonar nada.

Por lo tanto, me sorprendería mucho si la creación de objetos se realizó de forma prototipo-clonación. No lo sé con absoluta certeza, pero apuesto a que no lo es. Estoy casi seguro de que la creación de objetos es solo la asignación de bloques de memoria pequeños y tal vez establecer algunos punteros dentro de su encabezado.

Ciertamente es verificable si alguien * NGEN * s algo de código y desmonta para ver cómo funciona la nueva() operador :)

+0

"Simplemente son" no tiene sentido. Todos los objetos en .NET tienen datos: hacen referencia a la memoria de referencia y una estructura vacía tiene un tamaño de 1 ... –

+0

Tiene razón, la redacción era bastante extraña. Lo escribiré de manera diferente – quetzalcoatl

2

C# no es prototipo basado. No necesita una instancia de un objeto existente para crear uno nuevo, ni es posible "extender" un objeto como javascript.

Por lo tanto, en principio, todos los objetos se crean ex nihilo.

Cuestiones relacionadas