Непонятки со ссылками на объекты в .NET
От: justStudent  
Дата: 21.02.19 12:20
Оценка:
Добрый день!

Чувствую, что чего-то не понимаю, а вот чего...

Есть WinForms приложение, там есть некий диалог редактирования списка элементов, создаю его вот так:

MyDialog dlg = new MyDialog(objectsList);
if (dlg.ShowDialog(this) != DialogResult.OK)
 return;

saveObjects(dlg.objectsList);


В конструкторе MyDialog я просто сохраняю objectsList в переменную член класса. В самом диалоге есть кнопки add, edit, remove. Пусть пользователь нажал Remove, я удалил объект из списка, а потом пользователь нажал на Cancel в диалоге. Т.е. он не хочет удалять этот объект, вообще все действия должны быть отменены.
А по факту получается, что в objectsList уже этого объекта нет (он был удален в обработчике кнопки Remove). Как я понимаю, это из-за того, что объекты передаются по ссылке. Т.е. objectsList и dlg.objectsList указывают на один список. Как же быть в этом случае? Делаю копию списка (со всеми его элементами)? Или хранить список операций и их атрибутов (скажем, 2 раза нажали Remove, удалив 2объекта, потом нажали Edit, потом add)? Но это ведь очень муторно?

Извиняюсь за тупой вопрос, но правда не понимаю. В C++ это проще, мы там сами управляем свойствами объектов (ссылка, копия и пр)

Заранее спасибо за ответ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.