![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу понять почему это работает :)
Strate © (2007-05-09 20:03:00)Здравствуйте.
Мне вот просто интересно почему такое работает:
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 ещё не проинициализирована, как же удалось получить доступ к внутреннему методу?
Loginov Dmitry (2007-05-10 00:56:00) [1]> Мне вот просто интересно почему такое работает:
В таком коротком участке кода - и столько бреда! Но работает, а с чего оно не будет работать. Формально все в норме. А вот то, что Self можно в методе менять - это, ИМХО, недочет Борланда (лучше бы такой бред вообще не компилил).
begin...end (2007-05-09 20:41:00) [2]> sniknik © (09.05.07 20:28) [1]
> with TForm1.Create
with Create. Ещё правильнее.
sniknik (2007-05-09 20:28:00) [3]> Мне вот просто интересно почему такое работает:
а оно точно, так работает? ;)
> как же удалось получить доступ к внутреннему методу?
сделай его 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;