Я постоянно повторяю одну и ту же проблему, когда объект, который я хочу ссылаться, копируется или где ссылается объект, который я хочу скопировать. Это происходит, когда я использую оператор =.Когда значение C#/объект копируется и когда копируется его ссылка?
Например, если я посылаю объект в другой форме, а именно:
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
в функциях, когда объект копируется и когда объект получает ссылку в каждом случае вопроса (т. Е. При переходе к функциям при установке в качестве другие объекты (например, первые два приведенных выше примера), при копировании переменных-членов, таких как третий пример и т. д.)?
Извините, что никпик здесь. Объекты не выводятся. Типы делают. Объект обычно является термином, используемым для описания экземпляра типа. – 2010-12-03 17:07:25
Вы можете передать аргумент * по * ссылке, используя `ref`, но это не то же самое, что передать его * как * ссылку. Я думаю, что стоит отличать двух. – 2010-12-03 17:14:59