Я снова и снова сталкиваюсь с одной и той же проблемой, когда копируется объект, на который я хочу сослаться, или на который ссылается объект, на который я хочу скопировать.Это происходит, когда я использую оператор =.
Например, если я отправляю объект в другую форму, например:
SomeForm myForm = new SomeForm();
SomeObject myObject = new SomeObject();
myForm.formObject = myObject;
..., а затем изменяю объект в формеисходный объект не изменяется.Это как если бы объект был скопирован и на него не ссылались.Тем не менее, когда я делаю это:
SomeObject myObject = new SomeObject();
SomeObject anotherObject = new SomeObject();
anotherObject = myObject;
... и затем изменяю anotherObject
, myObject
также модифицируется.
Самый отягчающий случай, когда я пытаюсь клонироватьодин из моих определенных объектов:
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;
}
}
, когда я делаю это ...
SomeObject obj1 = new SomeObject(1, 2);
SomeObject obj2 = new SomeObject();
obj2.Clone(obj1);
... obj1
ссылается, и любые изменения obj2
изменяют obj1
.
Системные объекты, такие как int, double, string
и т. Д., По-видимому, всегда копируются, за исключением случая с описанным выше методом клонирования.
Мой вопрос заключается в том, чтобы не учитывать использованиеключевое слово ref
в функциях, когда объект копируется и когда на объект ссылаются в каждом конкретном случае (например, при переходе к функциям, при установке в качестве других объектов (как в первых двух примерах выше), при копированиипеременные-члены, такие как третий пример и т. д.)?