Главная страница
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.07 c
2-1178035094
Belorus
2007-05-01 19:58
2007.05.27
Классы


11-1160141707
Zoom Evstrahiev
2006-10-06 17:35
2007.05.27
Зеркало для KOLCoolBar


15-1177681986
oldman
2007-04-27 17:53
2007.05.27
Почти восемь вечера уже... Где Пупкин?


8-1158138002
serebrov_e_l
2006-09-13 13:00
2007.05.27
Фильтрация звука


2-1178285357
Ega23
2007-05-04 17:29
2007.05.27
Проблема выхода из приложения