Does C # Kopieren Sie einfach Felddaten zu einem anderen Feld zuweisen oder bezieht sich auf die Daten?
-
21-09-2019 - |
Frage
Auf einem Feld zum anderen zuweisen, funktioniert die C # Daten nur über kopieren, oder tatsächlich schafft Link? In diesem Artikel gibt es ein Beispiel für Game-Engine-Struktur. Der Codierer dort hat Komponenten ihre Eltern enthalten. In C #, enthalten sie nur die Eltern zu kopieren oder sie beziehen sich auf das?
Beispielcode:
class World
{
...
public void Update()
{
...
ent.OnAttach(this);
...
}
...
}
class Entity
{
...
public void OnAttach(World world)
{
world_ = world;
}
...
}
Könnte das Entity-Objekt nun Zugriff Welt Objekt und haben Zugriff auf seinen Feldern und Methoden, wie in der artice? (Oder ich falsch verstanden den Code?)
Lösung
Da Ihr Datentyp World
als class
definiert und nicht ein struct
das bedeutet, dass, wenn Sie eine Variable dieses Typs zuweisen, nur ein Hinweis auf die gleichen Daten kopiert wird.
In anderen wrods, ob Sie dann world.SomeProperty = something
verwenden oder world_.someProperty = something
werden sie das gleiche Objekt im Speicher bearbeiten werden.
Wenn Sie Ihren Datentyp ändern ein struct
sein dann die gesamte Datenstruktur kopiert werden, und Sie werden zwei Kopien der gleichen Daten haben.
Unabhängig davon, wie Sie Ihre Daten definiert, wenn Sie einen Verweis auf die Daten haben, können Sie dann ihre Methoden oder Eigenschaften zuzugreifen. Also, ja, sobald Ihr Entity-Objekt einen Verweis auf die Welt Objekt hat, kann sie alle Methoden zugreifen oder Eigenschaften auf sie (solange sie nicht privat sind).
Andere Tipps
Es hängt von der Art World
. Wenn es sich um eine Referenz-Typ (eine Klasse) ist, auf das gleiche Objekt der kopierte Bezugspunkt und somit das Objekt durch die neue Referenz darauf ändert beeinflussen das ursprüngliche Objekt (wird kein neues Objekt erstellt). Dies ist der Fall in der entsandte Probe. Das Feld wird einfach auf das gleiche World
Objekt beziehen.
Wenn der World
Typ Wert Typ ist, wird es kopiert hat (zusammen mit seinem Inhalt) und wird ein ganz unterschiedlicher Wert wird, ändert das nicht die ursprünglichen auswirken wird.
Wie Entity & World ist Klasse (das heißt „Referenztypen“), dann müßten sie nur Verweise auf sie. Würde man eine Struktur (das heißt ein „Werttyp“), dann würde die Enite Sache kopiert werden.
Sie sollten vorbei Referenz einen Blick und nach Wert übergeben. Ihr Welt-Objekt wird eine Referenz übergeben, so dass Sie einen Verweis auf eine Stelle in dem Speicher vorbei, wo die Daten dieses Objekt befindet enthält.
Entity kann jetzt nur Zugriff Welt Objekt öffentlicher Methoden, Eigenschaften.