Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скопировать объект 
V
    Опции темы
Rickert
Дата 23.4.2008, 04:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Допустим есть объекты:
Код

aTestclass t = new aTestClass(), t2 = t, t3;

t2 - по сути, ссылка на t, аналог из C++: т.е., если будет меняться t, то будет меняться и t2.
Вопрос: как мне просто один раз скопировать t в t3, чтобы последующие изменения t, не влияли на t3?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Dogo
Дата 23.4.2008, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 9



Можно решить проблему 2мя способами:
1) Имплиментировать интерфейс ICloneable.
2) Создать конструктор копирования.
--------------------
 
PM MAIL ICQ   Вверх
Rickert
Дата 23.4.2008, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



1 - не понял.
2 - не пойдёт, мне надоскопировать объект не обязательно при создании.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Dogo
Дата 23.4.2008, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 9



Цитата(Rickert @  23.4.2008,  06:52 Найти цитируемый пост)
1 - не понял.

Объясняю - 
Код

class aTestClass : ICloneable
{
  public int a;
  public int b;
  
  public aTestClass(int _a, int _b)
  {
     this.a = _a;
     this.b = _b;
  }

   public object Clone()
  {
     return new aTestClass(this.a, this.b);
  }
}

class DemoICloneable
{
   public static void Main()
  {
     aTestClass obj1 = new aTestClass(1, 2);
     aTestClass obj2 = (aTestClass) obj1.Clone();
  }
}


--------------------
 
PM MAIL ICQ   Вверх
Walker
Дата 23.4.2008, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: 5
Всего: 16



Цитата

2 - не пойдёт, мне надоскопировать объект не обязательно при создании. 

Что, по сути, тождественно. Ведь при копировании объекта Вы выделяете в динамической памяти место под хранение его клонированного экземпляра. Т.е., создаёте новый экзмпляр, во всём подобный исходному.
Цитата

Можно решить проблему 2мя способами:
1) Имплиментировать интерфейс ICloneable.
2) Создать конструктор копирования. 

Если пишете библиотеку, то лучше реализовывать и то и другое. Обычно в методе Clone(), просто вызывают конструктор копирования, метод возвращает ссылку на новый объект-клон. Интерфейс - некоторая альтернатива множественному наследованию. Вы сообщаете другим классам о том, что Ваш класс поддерживает определённую модель поведения.



--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
Rickert
Дата 24.4.2008, 03:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Solved smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
jorikdima
Дата 11.10.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 18.1.2008
Где: Там, где Зенит

Репутация: нет
Всего: нет



Почему IClonable не поддерживаетс в .NET в версии выше 2? На что менять?
http://msdn.microsoft.com/en-us/library/sy...ble(VS.80).aspx

Добавлено через 6 минут и 25 секунд
Это специально сделано, что конструктор копирования (принимающий в качестве аргумента объект такого же типа) позволяет использовать поля копируемого объета даже если они идут с модификатором private?
PM MAIL   Вверх
elbjarn
Дата 11.10.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 13.4.2008
Где: Дубна

Репутация: 1
Всего: 3



Цитата(jorikdima @  11.10.2008,  13:23 Найти цитируемый пост)
Почему IClonable не поддерживаетс в .NET в версии выше 2? На что менять?
http://msdn.microsoft.com/en-us/library/sy...ble(VS.80).aspx


это вы откуда взяли? smile отлично поддерживается

Цитата(jorikdima @  11.10.2008,  13:23 Найти цитируемый пост)
Это специально сделано, что конструктор копирования (принимающий в качестве аргумента объект такого же типа) позволяет использовать поля копируемого объета даже если они идут с модификатором private? 

поскольку операции идут в функции, принадлежащей тому же классу, ей доступны все поля этого класса.

PM MAIL ICQ   Вверх
jorikdima
Дата 11.10.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 18.1.2008
Где: Там, где Зенит

Репутация: нет
Всего: нет



Цитата(elbjarn @ 11.10.2008,  14:05)
Цитата(jorikdima @  11.10.2008,  13:23 Найти цитируемый пост)
Почему IClonable не поддерживаетс в .NET в версии выше 2? На что менять?
http://msdn.microsoft.com/en-us/library/sy...ble(VS.80).aspx


это вы откуда взяли? smile отлично поддерживается

 smile  smile 
Блин четко видел в MSDN и даже ссылку приве, оторая днем работала, сейчас нет smile Там еще в конце страницы люди обсуждали причины smile Сейчас по поиску нашел описание интерфейса и все  там впорядке с 2+ версиями. Сорри, это был глюк.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1161 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.