Sigo recibiendo el mismo problema una y otra vez donde se copia un objeto que quiero referencia o cuando se hace referencia a un objeto que quiero copiar. Esto sucede cuando uso el operador =.¿Cuándo se copia un valor/objeto C# y cuándo se copia su referencia?
Por ejemplo, si yo voy a enviar el objeto a otra forma, es decir:
SomeForm myForm = new SomeForm();
SomeObject myObject = new SomeObject();
myForm.formObject = myObject;
... y luego modificar el objeto en la forma, el objeto original no se modifican. Es como si el objeto se hubiera copiado y no se hubiera hecho referencia a él. Sin embargo, cuando hago esto:
SomeObject myObject = new SomeObject();
SomeObject anotherObject = new SomeObject();
anotherObject = myObject;
... y luego modificar anotherObject
, myObject
es modificado también.
El caso más agravante es cuando intento clonar uno de mis objetos definidos:
public class SomeObject
{
double value1, value2;
//default constructor here
public SomeObject(val1, val2)
{
value1 = val1;
value2 = val2;
}
public void Clone(SomeObject thingToCopy)
{
this.value1 = thingToCopy.value1;
this.value2 = thingToCopy.value2;
}
}
cuando hago esto ...
SomeObject obj1 = new SomeObject(1, 2);
SomeObject obj2 = new SomeObject();
obj2.Clone(obj1);
... obj1
se referencia y cualquier modificación a obj2
cambia obj1
.
Objetos del sistema como int, double, string
, etc. parecen copiarse siempre, excepto en el caso del método de clonación anterior.
Mi pregunta es, no teniendo en cuenta el uso de la palabra clave ref
en funciones, cuándo se copia un objeto y cuándo se hace referencia a un objeto en cada caso (es decir, al pasar a funciones, al establecer como otros objetos (como los primeros dos ejemplos anteriores), al copiar variables de miembros como el tercer ejemplo, etc.)?
Voy a tener que escribir uno . Comprendo punteros en su mayor parte de C++, simplemente no entiendo cuando se usan en relación con el valor y los tipos de referencia en C#, ya que no hay operadores/operadores de puntero "seguros" explícitos en C#. –
Escribiré el programa más tarde ya que ahora estoy en el trabajo. Gracias por la ayuda. Leeré los artículos también. –
La analogía de la dirección en hojas separadas de papel es útil para captar el concepto de tipos de referencia. – Martin