Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2011, 14:59   #1
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию Копирование экземпляров класса

Здравствуйте, народ. Такой вопрос: есть к примеру 2 переменные пользовательского класс TMyClass. Естественно, в этом классе может быть объявлено неограниченное количество дополнительных полей разных типов.
Так вот, как скопировать содержимое класса по одной переменной в другую? Имеется в виду чистое копирование данных в памяти.
П.С. Понимаю, что это пахнет сериализацией, но тут не нужно сохранять в файл, а просто осуществить копирование данных в памяти. Спасибо!
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 27.08.2011, 15:08   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Object2.Assign(Object1) ?
пыщь
JTG вне форума Ответить с цитированием
Старый 27.08.2011, 15:19   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ассинг же от TPersistent достается?
или уже не так в последних версиях?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.08.2011, 15:35   #4
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ассинг же от TPersistent достается?
или уже не так в последних версиях?
А что мешает наследовать TPersistent, он же для этого (не только) и писался, чтобы была возможность компировать объекты, а не получать на них ссылку
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 27.08.2011, 15:36   #5
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

т.е. кроме как прямого копирования всех полей из одной переменной в другую и создания объектов в классе, больше способов однострочных не существует?
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 27.08.2011, 15:37   #6
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

т.е. вы хотите сказать, что если у меня поле класса содержит TStringList, а в нем связанные со строками объекты, то TPersistent скопирует и эти данные?
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 27.08.2011, 15:45   #7
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
т.е. вы хотите сказать, что если у меня поле класса содержит TStringList, а в нем связанные со строками объекты, то TPersistent скопирует и эти данные?
Наследники содержат методы предков. Это значит что вы можете использовать метод Assign
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 27.08.2011, 15:59   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

кхм, в Delphi 6 TPersistent, лишь интерфейс для копирующихся объектов.
TStrings, переопределяет метод Assign, и копирует все сам.
значит, ТС грозит тоже самое, написать метод для копирования/присваивания
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.08.2011, 16:19   #9
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

я так уже и понял... ибо полагаться на Assign что-то мне сомнительно. Чую, что утечки пойдут. Значит все-таки по старинке? Писать метод, в котором будут копироваться данные из одного экземпляра в другой?
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 27.08.2011, 16:34   #10
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
я так уже и понял... ибо полагаться на Assign что-то мне сомнительно. Чую, что утечки пойдут. Значит все-таки по старинке? Писать метод, в котором будут копироваться данные из одного экземпляра в другой?
ага, вот например Assign у TStrings

Код:
procedure TStrings.Assign(Source: TPersistent);
begin
  if Source is TStrings then
  begin
    BeginUpdate;
    try
      Clear;
      // Must use property setter for DefaultEncoding
      DefaultEncoding := TStrings(Source).FDefaultEncoding;
      FDefined := TStrings(Source).FDefined;
      // Must use internal property setter for Encoding
      SetEncoding(TStrings(Source).FEncoding);
      FNameValueSeparator := TStrings(Source).FNameValueSeparator;
      FQuoteChar := TStrings(Source).FQuoteChar;
      FDelimiter := TStrings(Source).FDelimiter;
      FLineBreak := TStrings(Source).FLineBreak;
      FStrictDelimiter := TStrings(Source).FStrictDelimiter;
      FWriteBOM := TStrings(Source).FWriteBOM;
      AddStrings(TStrings(Source));
    finally
      EndUpdate;
    end;
    Exit;
  end;
  inherited Assign(Source);
end;
ZuBy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Печатать репорт в несколько экземпляров chugo Microsoft Office Access 1 27.09.2010 06:27
Сортировка массива экземпляров класса по именам Ciberal Общие вопросы C/C++ 1 18.05.2010 23:08
2-мерный динамический массив экземпляров класса. С++ Парсифаль Общие вопросы C/C++ 1 29.12.2009 14:35
копирование всех полей класса Juffin Общие вопросы Delphi 1 19.05.2009 19:16
При создании нескольких экземпляров класса приложение зависает Mixasik Общие вопросы C/C++ 1 25.04.2009 13:25