Главная страница
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.06 c
15-1177769716
TnPsCs
2007-04-28 18:15
2007.05.27
А как сложить строки в PHP?


15-1177609948
YurikGL
2007-04-26 21:52
2007.05.27
Спам в одной ветке


15-1177951499
ProgRAMmer Dimonych
2007-04-30 20:44
2007.05.27
Подскажите программу для склеивания MIDI-файлов


4-1166780935
Grademax
2006-12-22 12:48
2007.05.27
Как узнать сколько времени отработал HDD?


15-1177432649
Nucer
2007-04-24 20:37
2007.05.27
RewriteRule в Apache