C # no sólo copia los datos de campo sobre la asignación a otro campo o se refiere a los datos?

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

  •  21-09-2019
  •  | 
  •  

Pregunta

En la asignación de un campo a otro, hace el C # sólo copiar datos a través de, o en realidad crea vínculo? En este artículo hay un ejemplo de estructura de motor de juego. El codificador no tiene componentes contienen sus padres. En C #, no sólo contienen la copia de los padres, o se refieren a ella?

código de ejemplo:

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

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

Podría el objeto Entity ahora objeto de World acceder y tener acceso a ella es campos y métodos, al igual que en el artice? (O no he entendido bien el código?)

¿Fue útil?

Solución

Debido a que su tipo de datos World se define como un class y no un struct que significa que cuando se asigna una variable de ese tipo, a referencia a los mismos datos se copia.

En otras wrods, si a continuación, utiliza world.SomeProperty = something o world_.someProperty = something estarán editando el mismo objeto en la memoria.

Si cambia de tipo de datos a ser un struct entonces toda la estructura de datos se copiará y tendrá dos copias de los mismos datos.

Independientemente de cómo se definen los datos, una vez que tenga una referencia a los datos que a continuación, puede acceder a sus métodos o propiedades. Así que, sí, una vez que su objeto Entity tiene una referencia al mundo de los objetos se puede acceder a cualquiera de los métodos o propiedades en el mismo (siempre y cuando no son privadas).

Otros consejos

Depende del tipo World. Si se trata de un tipo de referencia (una clase), la referencia copiado apuntará al mismo objeto y cambiando así el objeto apuntado por la nueva referencia afectará el objeto original (no se crea un nuevo objeto). Este es el caso de la muestra publicado. El campo simplemente se referirá al mismo objeto World.

Si se un tipo de valor, se copia el tipo World (junto con su contenido) y se convertirá en un valor completamente distinto, cambio que no afectará a la original.

Como Entidad & World son de clase (es decir, "los tipos de referencia"), entonces ellos sólo tienen referencias a la otra. Si uno era un struct (es decir, un "tipo de valor"), entonces la cosa Enite sería copiado.

Usted debe tener una mirada en el paso por referencia y que pasa por valor. Su objeto de World es una pasa por referencia, por lo que estás pasando una referencia a una ubicación en la memoria donde los datos de este objeto contiene reside.

entidad podría ahora métodos públicos el único acceso de objeto del mundo, propiedades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top