2012-10-04 2 views
11

Ich las über prototype-based Sprachen und dieser Zweifel kommt mir in den Sinn:Ist die Erstellung von .NET-Objekten "ex nihilo"?

Ist .NET Objekterstellung ex nihilo („aus dem Nichts“) und ermöglichen so neue Objekte von Grund auf neu erstellt werden? Oder ist .NET-Objekterzeugung basierend auf dem Klonen von einem vorhandenen Objekt (d. H. Object) als Klonprototyp für neue Objektkreationen?

+4

+1 für die Verwendung von süßen Latein :) – RedFilter

+2

+1 für ungewöhnliche und interessante Frage – quetzalcoatl

+0

@RedFilter: Was schmeckt bitteres Latein oder klingt wie? – BoltClock

Antwort

2

Die einfachsten Objekte in .Net haben keine benutzerspezifischen Daten, nur einige interne Plattform Informationen über ihren Typ und In-Memory-Speicherort ihrer tatsächlichen Daten. Aus Sicht des Anwenders (des Entwicklers) "existieren" sie nur und unterscheiden sich nur in ihrer "Identität". Ihre Klasse kann in keiner Weise erweitert werden. Ich sehe keinen Sinn darin, irgendetwas zu klonen.

Kompliziertere Objekte werden von etwas abgeleitet und werden letztendlich vom Basisobjekt abgeleitet. In .Net gibt es keine Kopierkonstruktion und keine Deep-Copying-Semantik. Auf der Ebene der nicht-basischen Objekte hat es also keinen Sinn, etwas zu kopieren.

Auf der Ebene der Metadaten enthält jedes Objekt Informationen darüber, zu welcher (welchen) Klasse (n) es gehört. Die Metainformationen werden geteilt, und alle Objekte derselben Klasse zeigen nur auf die gemeinsamen Metainformationen. Klonen immer noch keinen Sinn.

Daher würde ich sehr überrascht sein, wenn die Objekterstellung in einer Prototyp-Klonierung getan wurde. Ich weiß es nicht mit absoluter Sicherheit, aber ich wette, das ist es nicht. Ich bin mir ziemlich sicher, dass die Objekterzeugung nur die Zuweisung eines kleinen Speicherblocks ist und vielleicht ein paar Zeiger innerhalb seiner Kopfzeile setzt.

Es sicherlich nachprüfbar ist, wenn jemand * ngen * einige Code s und zerlegt es zu sehen, wie neu() Operator arbeitet :)

+0

verwendet "Sie sind nur" macht keinen Sinn. Alle Objekte in .NET haben Daten - Referenzen Referenzspeicher und eine leere Struktur hat eine Größe von 1 ... –

+0

Sie haben Recht, die Formulierung war ziemlich seltsam. Ich werde es anders schreiben – quetzalcoatl

2

C# ist nicht Prototyp basiert. Sie brauchen keine Instanz eines vorhandenen Objekts, um ein neues Objekt zu erstellen, noch ist es möglich, ein Objekt wie JavaScript zu "erweitern".

Also im Prinzip werden alle Objekte ex nihilo erstellt.

Verwandte Themen