Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.27;
Скачать: CL | DM;

Вниз

Не могу понять почему это работает :)   Найти похожие ветки 

 
Strate ©   (2007-05-09 20:03) [0]

Здравствуйте.

Мне вот просто интересно почему такое работает:

TFrom1 = class(Tform);
...
 public
   function ShowDialog: integer;

end;

.....

var
 Form1 : TForm1;

.....

function TForm1.ShowDialog : integer;
begin
 Self := TForm1.Create(Application.MainForm);
 ShowModal;
 Self.Free;
end;


Форма убрана из auto-create.

Из другой формы вызываю:

Form1.ShowDialog;

и всё работает, но ведь Form1 ещё не проинициализирована, как же удалось получить доступ к внутреннему методу?


 
sniknik ©   (2007-05-09 20:28) [1]

> Мне вот просто интересно почему такое работает:
а оно точно, так работает? ;)

> как же удалось получить доступ к внутреннему методу?
сделай его virtual и не получишь...

а в этой главное не обращаться к данным которых еще нет, код же есть всегда (даже при virtual, только ссылки на него не будет)

и, имхо правильнее (если уж нужен такой изврат) делать вот так


TFrom1 = class(Tform);
...
public
 class function ShowDialog: integer;
end;

.....

//var
// Form1 : TForm1;

.....

class function TForm1.ShowDialog : integer;
begin
 with TForm1.Create(Application.MainForm) do
   try
     result:= ShowModal;
   finally
     Free;
   end;  
end;


 
begin...end ©   (2007-05-09 20:41) [2]

> sniknik ©   (09.05.07 20:28) [1]
> with TForm1.Create

with Create. Ещё правильнее.


 
Loginov Dmitry ©   (2007-05-10 00:56) [3]

> Мне вот просто интересно почему такое работает:


В таком коротком участке кода - и столько бреда! Но работает, а с чего оно не будет работать. Формально все в норме. А вот то, что Self можно в методе менять - это, ИМХО, недочет Борланда (лучше бы такой бред вообще не компилил).



Страницы: 1 вся ветка

Текущий архив: 2007.05.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.085 c
15-1177666772
Ega23
2007-04-27 13:39
2007.05.27
Умер Мстислав Растропович.


15-1177619556
iZEN
2007-04-27 00:32
2007.05.27
Sun OpenSolaris 10 (раздаётся бесплатно)


2-1178433546
Doom-2
2007-05-06 10:39
2007.05.27
новое подключение Flash или ZIV


2-1178622434
npu3pak
2007-05-08 15:07
2007.05.27
Блокировка клавиатуры, мышки и их комбинаций


15-1177676806
I-New
2007-04-27 16:26
2007.05.27
Есть GDI+ в Висте?