Est-ce que C # copier uniquement les données sur le terrain sur l'attribution à un autre champ ou fait référence aux données?

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

  •  21-09-2019
  •  | 
  •  

Question

A l'attribution d'un champ à l'autre, fait le C # il suffit de copier des données sur, ou crée en fait le lien? cet article il y a un exemple de la structure du moteur de jeu. Le codeur, il a des composants contiennent leurs parents. En C #, ils contiennent juste la copie du parent, ou ils se réfèrent à lui?

Exemple de code:

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

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

pourrait l'objet entité désormais accéder à l'objet du monde et avoir accès à ses champs et méthodes, comme dans le Artice? (Ou je mal compris le code?)

Était-ce utile?

La solution

Parce que votre World type de données est défini comme un class et non un struct qui signifie que lorsque vous attribuez une variable de ce type, seulement référence pour les mêmes données sont copiées.

Dans d'autres wrods, si vous utilisez ensuite world.SomeProperty = something ou world_.someProperty = something ils éditeront le même objet en mémoire.

Si vous changez le type de données à une struct puis toute la structure de données sera copiée et vous aurez deux copies des mêmes données.

Quelle que soit la façon dont vous défini vos données, une fois que vous avez une référence aux données que vous pouvez accéder à ses méthodes ou propriétés. Donc, oui, une fois votre objet entité a une référence au monde objet, il peut accéder à toutes les méthodes ou propriétés sur elle (tant qu'ils ne sont pas privés).

Autres conseils

Il dépend du type de World. Si c'est un type de référence (une classe), la référence copiée pointera vers le même objet et changeant ainsi l'objet pointé par la nouvelle référence aura une incidence sur l'objet original (aucun nouvel objet est créé). Tel est le cas dans l'échantillon affiché. Le champ sera tout simplement faire référence au même objet World.

Si le type de World est un type de valeur, il est copié (avec son contenu) et deviendra une valeur tout à fait distincte, changement qui n'affectera pas l'original.

Comme entité et mondiale sont la classe (à savoir « types de référence »), alors ils ont tout simplement des références à l'autre. Si l'on était un struct (à savoir un « type de valeur »), alors la chose Enite serait copié.

Vous devriez jeter un oeil à passer par référence et passant par la valeur. Votre objet monde est passé par référence, donc vous passez une référence à un emplacement en mémoire où les données de cet objet contient réside.

entité responsable peut maintenant des méthodes publiques seulement l'accès objet du monde, propriétés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top