Главная страница
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.037 c
15-1177940898
SBOR
2007-04-30 17:48
2007.05.27
Реестр самовостанавливается


2-1178638279
Bullfrog
2007-05-08 19:31
2007.05.27
GroupBox&Label


15-1177769617
Ketmar
2007-04-28 18:13
2007.05.27
IEEE754-тика угрожает человечеству


2-1178394905
RedBanner
2007-05-05 23:55
2007.05.27
компонент дерево


15-1177501113
UMU
2007-04-25 15:38
2007.05.27
Asus LightScribe