Does C # Kopieren Sie einfach Felddaten zu einem anderen Feld zuweisen oder bezieht sich auf die Daten?

StackOverflow https://stackoverflow.com/questions/2078974

  •  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?)

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top