Форум: "Начинающим";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];
Внизобъект в property Найти похожие ветки
← →
.code (2011-04-25 12:25) [0]Есть класс TMyClass, есть форма у которой есть проперти типа TMyClass. Вопрос как правильно написать метод SetValue:
property MyClass: TMyClass read FMyClass write SetMyClass;
TMyForm.SetMyClass(Value: TMyClass);
begin
FMyClass.Assign(Value);
end;
или
TMyForm.SetMyClass(Value: TMyClass);
begin
FMyClass := Value;
end;
← →
Ega23 © (2011-04-25 12:29) [1]
> Вопрос как правильно написать метод SetValue:
Оба варианта правильны. А какое поведение ты хочешь - зависит от тебя.
← →
Юрий Зотов © (2011-04-25 13:35) [2]> .code (25.04.11 12:25)
В первом случае копируется "начинка" объекта - то есть, имеем два экземпляра объекта: источник и приемник.
Во втором случае копируется ссылка на объект - то есть, имеем один экземпляр объекта.
Какой вариант выбрать - тот, который в данном случае нужен.
← →
KSergey © (2011-04-25 15:50) [3]Как-то я не вижу применения для второго варианта, если честно. Особенно, если в деструкторе TMyForm написано FMyClass.Free
← →
Юрий Зотов © (2011-04-25 16:01) [4]
> KSergey © (25.04.11 15:50) [3]
> Как-то я не вижу применения для второго варианта, если честно.
Например, любая ссылка на внешний компонент (PopupMenu и пр.)
← →
Ega23 © (2011-04-25 16:16) [5]
> Как-то я не вижу применения для второго варианта, если честно.
Да сплошь и рядом. Самое первое, что в голову пришло - передать в форму коннект к БД.
← →
Ega23 © (2011-04-25 16:21) [6]По-идее, совсем по-православному нужно событие генерить, типа OnGetADOConnection, но на практике я напрямую в форму/фрейм объект передавал.
← →
.code (2011-04-25 18:17) [7]почему срабатывает эксепшн.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TMyClass = class(TPersistent)
public
constructor Create(AOwner: TComponent);
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyClass }
constructor TMyClass.Create(AOwner: TComponent);
begin
end;
{ TForm }
procedure TForm1.FormCreate(Sender: TObject);
var
A, B: TMyClass;
begin
A := TMyClass.Create(nil);
B := TMyClass.Create(nil);
B.Assign(A); //<-EXCEPTION CANNOT ASSIGN ...
end;
end.
← →
MBo © (2011-04-25 18:46) [8]>почему срабатывает эксепшн.
Так и положено делать неперекрытому TPersistent.AssignTo
← →
Юрий Зотов © (2011-04-25 19:14) [9]> почему срабатывает эксепшн
Перекройте метод AssignTo. Иначе откуда будет известно, как Вы хотите копировать начинку объекта?
← →
Amoeba_ (2011-04-25 22:51) [10]
> почему срабатывает эксепшн.
Как раз прямо по сабжу и с подробностями:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=79517
← →
Германн © (2011-04-26 02:26) [11]
> Amoeba_ (25.04.11 22:51) [10]
>
>
> > почему срабатывает эксепшн.
>
> Как раз прямо по сабжу и с подробностями
Как раз не прямо, хоть и с подробностями. Чем вынудили ЮЗ на необдуманный топик.
Тут на ДМ вопрос о самописном наследнике TPersistent. Там на королевстве вопрос о компоненте из палитры Дельфи.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c