Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
ВнизНе могу понять почему это работает :) Найти похожие ветки
← →
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.Createwith Create
. Ещё правильнее.
← →
Loginov Dmitry © (2007-05-10 00:56) [3]> Мне вот просто интересно почему такое работает:
В таком коротком участке кода - и столько бреда! Но работает, а с чего оно не будет работать. Формально все в норме. А вот то, что Self можно в методе менять - это, ИМХО, недочет Борланда (лучше бы такой бред вообще не компилил).
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.047 c