Ha C # solo copiare i dati di campo sulla assegnazione ad un altro campo o si riferisce ai dati?

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

  •  21-09-2019
  •  | 
  •  

Domanda

Ad assegnare un campo all'altro, fa il C # è sufficiente copiare i dati sopra, o addirittura crea collegamento? In questo articolo c'è un esempio di struttura motore di gioco. Il codificatore non ha componenti contengono loro genitore. In C #, fanno solo contengono la copia genitore, o si riferiscono ad esso?

Esempio di codice:

class World
{
    ...
    public void Update()
    {
        ...
        ent.OnAttach(this);
        ...
    }
    ...
}

class Entity
{
    ...
    public void OnAttach(World world)
    {
        world_ = world;
    }
    ...
}

Potrebbe l'oggetto Entity ora accedere all'oggetto mondo e avere accesso ad esso è campi e metodi, come nel Artiče? (O ho capito male il codice?)

È stato utile?

Soluzione

Perché il vostro tipo di dati World è definito come un class e non un struct che significa che quando si assegna una variabile di quel tipo, a di riferimento per gli stessi dati vengono copiati.

In altre wrods, se quindi si utilizza world.SomeProperty = something o world_.someProperty = something saranno modificando lo stesso oggetto in memoria.

Se si cambia il tipo di dati per essere un struct allora l'intera struttura dati verrà copiato e avrete due copie degli stessi dati.

Indipendentemente da come si definito i dati, una volta che hai un riferimento ai dati si può quindi accedere ai suoi metodi o proprietà. Quindi, sì, una volta che l'oggetto entità ha un riferimento al mondo degli oggetti è possibile accedere a qualsiasi metodo o proprietà su di essa (fintanto che non sono private).

Altri suggerimenti

Dipende dal tipo di World. Se si tratta di un tipo di riferimento (una classe), il riferimento copiato punterà allo stesso oggetto e modificando così l'oggetto puntato dal nuovo riferimento influenzerà l'oggetto originale (verrà creato un nuovo oggetto). Questo è il caso del campione inviato. Il campo sarà semplicemente fare riferimento allo stesso oggetto World.

Se il tipo World è un tipo di valore, viene copiato (insieme al suo contenuto) e diverrà un valore completamente distinte, cambiamento che non alteri l'originale.

Come Entity Mondo sono di classe "(cioè i tipi di riferimento"), quindi avrebbero solo hanno riferimenti gli uni agli altri. Se uno era uno struct (vale a dire un "tipo di valore"), allora la cosa sarebbe enite essere copiato.

Si dovrebbe avere uno sguardo il passaggio per riferimento e passaggio per valore. Il vostro oggetto mondo è un passato per riferimento, in modo che stai passando un riferimento a una locazione di memoria in cui i dati di questo oggetto contiene risiede.

entità potrebbe ora metodi pubblici solo l'accesso dell'oggetto mondo, proprietà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top