Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
103 / 102 / 29
Регистрация: 15.01.2011
Сообщений: 481
1

Копирование значений полей из одного объекта в другой

12.01.2015, 12:52. Просмотров 786. Ответов 2
Метки нет (Все метки)


Здравствуйте.
Прошу помочь с копированием значений полей между объектами, относящимися к одному классу.
Например, вот описание класса:
Delphi
1
2
3
4
5
6
7
8
9
10
11
THumanName = class (TPersistent)
  private
    fArr: array [0..2] of string;
    procedure SetName(Index: integer; Value: string);
    function GetName(Index: integer): string;
  public
    property FirstName: string index 0 read GetName write SetName;
    property SurName: string index 1 read GetName write SetName;
    property LastName: string index 2 read GetName write SetName;
    constructor Create;
  end;
Вот описание его функций:
Delphi
1
2
3
4
5
6
7
8
9
procedure THumanName.SetName(Index: integer; Value: string);
begin
  fArr[Index]:=Value;
end;
 
function THumanName.GetName(Index: integer): string;
begin
  Result:=fArr[Index];
end;
Вот основной код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm1.FormShow(Sender: TObject);
var
  Human1, Human2: THumanName;
begin
  Human1:=THumanName.Create;
  Human2:=THumanName.Create;
 
  with Human1 do
  begin
    FirstName:='Ипполит';
    SurName:='Матвеевич';
    LastName:='Воробьянинов';
  end;
 
  Human2.Assign(Human1);
 
  with Human2 do
    ShowMessage('Имя: '+FirstName+#13+
                'Отчество: '+SurName+#13+
                'Фамилия: '+LastName);
  Human1.Free;
  Human2.Free;
end;
В интернете прочитал, что для присваивания нужно, чтобы класс был наследником TPersistent, что и сделал. Во время выполнения на строке
Delphi
1
Human2.Assign(Human1);
получаю
Cannot assign a THumanName to a THumanName.

Press OK to ignore and risk data corruption.
Press Cancel to kill the program.
Собственно, вопрос: "Как скопировать все значения полей из одного объекта в другой?".

Есть, разумеется, вариант последовательного копирования каждого поля по отдельности, но может быть есть способ поизящней?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2015, 12:52
Ответы с готовыми решениями:

Копирование значений полей одного документа в другой
Добрый вечер! Есть БД с документами. В документах есть определенные поля (План), значения в...

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

Копирование Getter из одного объекта в другой
Уважаемые, у меня есть 2 объекта import * as mutations from './mutations' import * as forms...

Копирование значений одного массива в другой
Здравствуйте! В общем проблема просто детская, но она ввела в ступор. Задача проста: скопировать...

2
Native x86
Эксперт Hardware
4114 / 2514 / 735
Регистрация: 13.02.2013
Сообщений: 8,172
12.01.2015, 12:59 2
Метод Assign нужно реализовывать в наследнике самому. В TPersistent там заглушка, которая как раз и выводит данное сообщение.
1
103 / 102 / 29
Регистрация: 15.01.2011
Сообщений: 481
12.01.2015, 13:48  [ТС] 3
quwy, спасибо.
TPersistent убрал. Добавил в описание класса метод:
Delphi
1
procedure Assign(HumanName: THumanName);
А вот его реализация:
Delphi
1
2
3
4
5
6
7
8
9
procedure THumanName.Assign(HumanName: THumanName);
begin
  with HumanName do
  begin
    self.FirstName:=FirstName;
    self.SurName:=SurName;
    self.LastName:=LastName;
  end;
end;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2015, 13:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Копирование значений одного дата грида в другой
Добрый день возникла проблемка, после напряжённых 10 часов кодинга и написания большущей проги,...

Копирование одного текстового файла в другой, используя посимвольное, построчное и поблочное копирование
Здраствуйте, у меня такая проблемма мне надо обеспечить копирование одного текстового файла в...

Передача объекта из одного экземпляра класса в другой с запретом обращаться к методам и свойствам этого объекта
Всем привет! Есть класс, в котором используется объект (MyObject, объявленный в private). При...

Копирование значений однотипных одноименных полей класса
Есть класс Class Class1 { Int Var1; String Var2; } И Class Class2 { Int Var1;


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

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

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