Когда копируется значение/объект C# и когда копируется его ссылка?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Когда копируется значение/объект C# и когда копируется его ссылка?

Сообщение Anonymous »

Я снова и снова сталкиваюсь с одной и той же проблемой, когда копируется объект, на который я хочу сослаться, или когда ссылается на объект, который я хочу скопировать. Это происходит, когда я использую оператор =.

Например, если я отправляю объект в другую форму, т.е.:

Код: Выделить всё

SomeForm myForm = new SomeForm();
SomeObject myObject = new SomeObject();
myForm.formObject = myObject;
...а затем измените объект в форме, исходный объект не будет изменен. Это как если бы объект был скопирован, а не указан. Однако когда я это делаю:

Код: Выделить всё

SomeObject myObject = new SomeObject();
SomeObject anotherObject = new SomeObject();
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 ключевое слово в функциях, когда объект копируется и когда на объект ссылаются в каждом случае (т.е. при переходе к функциям, при установке в качестве других объектов (как в первых двух примерах выше), при копировании переменных-членов, таких как третий пример и т. д.)?

Подробнее здесь: https://stackoverflow.com/questions/434 ... nce-copied
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Значение не копируется должным образом во входном теге
    Anonymous » » в форуме CSS
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Проблема, когда файл web.config с действием сборки не копируется для развертывания пакета.
    Гость » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Гость
  • Файл evointernal.dat не копируется в выходную папку
    Anonymous » » в форуме C#
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Огурец Дженкинса не копируется на контроллер
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Файл Windows Dockerfile не копируется в папку приложения для базового образа
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»