Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Внизвопрос про self Найти похожие ветки
← →
KirillSKTS (2004-04-25 09:38) [0]Вопрос наверно чисто академический, без практического применения.
В ниже приведенном куске кода я получу в переменной PumpTread указатель на созданный экземпляр класса?
procedure TForm1.Button1Click(Sender: TObject);
begin
.............
with TPumpTread.Create(True) do
begin
PumpTread:=Self; <- ???????????
.............
end;
.............
end;
← →
KirillSKTS (2004-04-25 09:38) [0]Вопрос наверно чисто академический, без практического применения.
В ниже приведенном куске кода я получу в переменной PumpTread указатель на созданный экземпляр класса?
procedure TForm1.Button1Click(Sender: TObject);
begin
.............
with TPumpTread.Create(True) do
begin
PumpTread:=Self; <- ???????????
.............
end;
.............
end;
← →
Polevi © (2004-04-25 09:53) [1]на эзкмпляр класса TForm
← →
Polevi © (2004-04-25 09:53) [1]на эзкмпляр класса TForm
← →
Anatoly Podgoretsky © (2004-04-25 09:55) [2]Ты получишь уазатель на экземпляр класса TForm1
← →
Anatoly Podgoretsky © (2004-04-25 09:55) [2]Ты получишь уазатель на экземпляр класса TForm1
← →
Юрий Зотов © (2004-04-25 10:01) [3]Нет. Self"ом здесь будет экземпляр формы TForm1.
Параметр Self не является членом класса, поэтому with здесь ничего не дает. Это обычная переменная, которая неявно передается первым параметром метода. Указывает она либо на экземпляр класса, которому принадлежит метод (в обычных методах), либо на класс, которому принадлежит метод (в классовых методах). То есть, в Вашем примере мы фактически имеем следующее:
procedure TForm1.Button1Click(Self: TForm1; Sender: TObject);
Вот и вся наука. А чтобы получить ссылку на созданный экземпляр, Вам надо написать, например так:
procedure TForm1.Button1Click(Sender: TObject);
var
PumpTread: TPumpTread;
begin
PumpTread := TPumpTread.Create(True);
with PumpTread do
try
...
finally
Free
end
end;
← →
Юрий Зотов © (2004-04-25 10:01) [3]Нет. Self"ом здесь будет экземпляр формы TForm1.
Параметр Self не является членом класса, поэтому with здесь ничего не дает. Это обычная переменная, которая неявно передается первым параметром метода. Указывает она либо на экземпляр класса, которому принадлежит метод (в обычных методах), либо на класс, которому принадлежит метод (в классовых методах). То есть, в Вашем примере мы фактически имеем следующее:
procedure TForm1.Button1Click(Self: TForm1; Sender: TObject);
Вот и вся наука. А чтобы получить ссылку на созданный экземпляр, Вам надо написать, например так:
procedure TForm1.Button1Click(Sender: TObject);
var
PumpTread: TPumpTread;
begin
PumpTread := TPumpTread.Create(True);
with PumpTread do
try
...
finally
Free
end
end;
← →
KirillSKTS (2004-04-25 10:18) [4]А если сделать сложнее - вызовем функцию созданного обьекта
которая будет возвращать ссылку на обьект...
procedure TForm1.Button1Click(Sender: TObject);
begin
.............
with TPumpTread.Create(True) do
begin
PumpTread:=GetSelfRigt;
.............
end;
.............
end;
и в определении класса TPumpTread написать:
function GetSelfRigt:TPumpTread;
begin
Result:=Self; <- ???????????
end;
← →
KirillSKTS (2004-04-25 10:18) [4]А если сделать сложнее - вызовем функцию созданного обьекта
которая будет возвращать ссылку на обьект...
procedure TForm1.Button1Click(Sender: TObject);
begin
.............
with TPumpTread.Create(True) do
begin
PumpTread:=GetSelfRigt;
.............
end;
.............
end;
и в определении класса TPumpTread написать:
function GetSelfRigt:TPumpTread;
begin
Result:=Self; <- ???????????
end;
← →
Anatoly Podgoretsky © (2004-04-25 10:40) [5]Если так сделаешь, то проект не откомпилируется, какой к черту Self, он же применим только для классов.
← →
Anatoly Podgoretsky © (2004-04-25 10:40) [5]Если так сделаешь, то проект не откомпилируется, какой к черту Self, он же применим только для классов.
← →
Юрий Зотов © (2004-04-25 10:47) [6]function TPumpTread.GetSelfRigt: TPumpTread;
begin
Result:=Self
end;
Так пройдет. Но зачем?
← →
Юрий Зотов © (2004-04-25 10:47) [6]function TPumpTread.GetSelfRigt: TPumpTread;
begin
Result:=Self
end;
Так пройдет. Но зачем?
← →
KirillSKTS (2004-04-25 11:11) [7]То Anatoly Podgoretsky: я написал в определении класса, но поспешил и набрал просто функцию...
То Юрий Зотов: я это и имел в виду.
То Алл: Это все для общего образования. :) Спасибо за пояснения!
С уважением, Кирилл.
← →
KirillSKTS (2004-04-25 11:11) [7]То Anatoly Podgoretsky: я написал в определении класса, но поспешил и набрал просто функцию...
То Юрий Зотов: я это и имел в виду.
То Алл: Это все для общего образования. :) Спасибо за пояснения!
С уважением, Кирилл.
← →
Anatoly Podgoretsky © (2004-04-25 11:50) [8]Это равносильно Юрий Зотов © (25.04.04 10:01) [3] строка
PumpTread := TPumpTread.Create(True);
← →
Anatoly Podgoretsky © (2004-04-25 11:50) [8]Это равносильно Юрий Зотов © (25.04.04 10:01) [3] строка
PumpTread := TPumpTread.Create(True);
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.032 c