Текущий архив: 2005.12.25;
Скачать: CL | DM;
Вниз
Сделать копию объекта Найти похожие ветки
← →
Piero © (2005-12-08 12:49) [0]У меня есть объект типа TElem
var e1,e2 : TElem;
если я делаю
...
e1.create;
e1:=e2;
то e1 указывает на тот же адресс памяти, что и e2,
и естественно, после e2.free -> e1 - тоже уничтожен
как сделать, так чтобы e1 - создал свою копию объекта
← →
Piero © (2005-12-08 12:53) [1]copymemory(e1,e2,sizeof(e2)) - не получается
← →
Ormada © (2005-12-08 12:54) [2]Assign + F1
← →
Piero © (2005-12-08 13:39) [3]Ну и чего, ничего F1 не выдает
TElem = class
.....
← →
Piero © (2005-12-08 13:40) [4]Вернее не так, как применить метод assign к моему объекту
← →
Джо © (2005-12-08 16:49) [5]Если делать только на основе TObject, то нужно все реализовывать руками. Например, это может выглядеть так:
type
TElement = class
private
FTag: Integer;
FText: string;
... и другие поля
public
property Tag: Integer read FTag write FTag;
property Text: string read FText write FText;
// клонирует объект со всеми его полями
function Clone: TElement;
end;
implementation
function TElement.Clone: TElement;
begin
// никакого волшебства: создаем новый объект
// и передаем ему значения наших полей
Result := TElement.Create;
Result.FTag := FTag;
Result.FText := FText;
// ... и остальные поля
end;
Использование выглядит так:
var
Elem1,
Elem2: TElement;
begin
Elem1 := TElement.Create;
Elem1.Tag := 1;
Elem1.Text := "Element1";
Elem2 := Elem1.Clone;
ShowMessage(Elem2.Text);
....
Если базовым классом выбрать TPersistent лучше перекрывать его метод Assign (см. исходники VCL для того, чтобы понять логику работы). Если наследоваться от TComponent можно использовать его стандартные возможности сериализации/десиарелизации.
← →
Digitman © (2005-12-08 16:53) [6]TElem как декларирован ?
← →
Piero © (2005-12-09 12:36) [7]Ясно, я так примерно и сделал
Страницы: 1 вся ветка
Текущий архив: 2005.12.25;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.036 c