12 / 12 / 0
Регистрация: 04.07.2011
Сообщений: 287
1

Превращение ссылки на переменную в полноценную копию

07.04.2015, 18:48. Показов 430. Ответов 2
Метки нет (Все метки)

Здравствуйте!

Извините за немного непонятный заголовок темы, терминологию в конкретно этой теме я не очень хорошо знаю.

Есть класс, допустим Class1.
В нем есть переменная Color класса ColorResource.
В одном методе я делаю следующие действия
1. Сохраняю этот Color в отдельную переменную
2. Изменяю Color который в Class1
3. Возвращаю сохраненный Color обратно.

Но проблема в первом пункте - вместо нового экземпляра объекта создается просто его ссылка, поэтому на третьем пункте восстановление предыдущего значения не происходит - на Color назначается его же Color (ссылка ведь).

В коде это выглядит примерно так:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Class1
{
    private ColorResource Color;
 
    public void DoSomething ()
    {
        //Пункт первый : сохраняю Color в переменную
        ColorResource memoryColor = this.Color;
        //Пункт второй : назначаю Color новое значение - черный цвет
        Color = ColorResource.GetColors(ColorVariations.Black);
        //Пункт третий : восстановливаю предыдущее значение Color
        Color = memoryColor;
    }
}


В общем вопрос : как сделать не ссылку на объект, а настоящий экземпляр, копию этого объекта?

Спасибо.
0

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

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2015, 18:48
Ответы с готовыми решениями:

Создать полноценную копию объекта
Здравствуйте! Подскажите, как создать полноценную независимую копию объекта, если известно, что...

Нюансы работы с лямбдами и область видимости переменных: как передать в лямбду переменную, а не её копию?
Очень нужна помощь, не выходит задать глобальную переменную для работы программы, возможно нужно...

Как залить бутлоадер в китайскую копию arduino nano v3.0(CH340) через копию UNO
Пришли 2 контроллера, китацские копии arduino nano 3 и UNO. Обе на CH340. Драйвера встали...

Передать значение ссылки в переменную
<!-- организационная структура--> <script> function toggle(node, idVl) { dvS =...

2
Эксперт .NET
5309 / 4105 / 1183
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
07.04.2015, 19:06 2
Цитата Сообщение от robertono Посмотреть сообщение
сделать не ссылку на объект, а настоящий экземпляр, копию этого объекта?
1. Реализовать в вашем классе специальный конструктор, который принимает параметром объект этого класса.
2. Реализовать интерфейс ICloneable()
1
12 / 12 / 0
Регистрация: 04.07.2011
Сообщений: 287
07.04.2015, 19:12  [ТС] 3
Цитата Сообщение от insite2012 Посмотреть сообщение
1. Реализовать в вашем классе специальный конструктор, который принимает параметром объект этого класса.
Пока что так и сделал (уже вчера), но это довольно муторно и при каждом редактировании ColorResource придется добавлять это и в конструктор.

Цитата Сообщение от insite2012 Посмотреть сообщение
2. Реализовать интерфейс ICloneable()
А вот за это спасибо, через пару часов попробую прикрутить.

А что ли проще, чем ICloneable нету в C# ничего ? Мне казалось это делается проще чем добавить класс наследования и метод Clone.
http://csharp.2000things.com/2... ep-copies/
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2015, 19:12

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

Возврат ссылки на локальную переменную
Привет, есть такой код: int*& change(void) { int* x(new int(50)); return x; } int...

Возвращение ссылки на локальную переменную
Заметил недавно одну интересную вещь. Как вообще работает такой код? Причем коректно. int& func();...

Механизм возврата ссылки на переменную
Здравствуйте! Не совсем понятен механизм возвращения из функции типа "ссылка на.." и использование...

Создать ссылки на переменную в другом агенте
Здравствуйте! Проблема следующая. Есть два агента main и DDD. В агенте main есть переменная f в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.