Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1302559355
Германн
2011-04-12 02:02
2011.07.31
InnoSetup переменная {app}


2-1303719929
.code
2011-04-25 12:25
2011.07.31
объект в property


2-1303392541
барсук
2011-04-21 17:29
2011.07.31
Как вывести список IP, к которым стороняя программа подключена


2-1303805704
mefodiy
2011-04-26 12:15
2011.07.31
Как сделать reset MemTable


6-1221221764
Виталий_д
2008-09-12 16:16
2011.07.31
Send-SendTo / Recv-RecvFrom





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский