Self - это явное задание экземпляра класса в его методе.

 

Например для твоей формы это указание на саму форму:

 

Code:

procedure TForm1.Button1Click(Sender: TObject);

begin

showmessage(self.classname+#13#10+self.name);

end;

 

 

Если например это MDI форма то это будет указатель именно на тот экземпляр для которого выполняется этот код. На практике Self обычно применяется при написании своих классов, когда ты пишешь класс или компонент, то у тебя нет переменной с экземпляром этого компонента, следовательно чтобы обратится к экземпляру (который появится только в коде конечного пользователя, который будет использовать компонент) класса нужна переменная - вот она и берётся за self.

 

 

Автор:Vit  

Взято с Vingrad.ruhttps://forum.vingrad

 

 

 


 

 

Чтобы понять, что такое self надо понять что такое метод класса. Метод класса - это просто функция(процедура) который имеет дополнительный неявный параметр - указатель на экземпляр класса. То есть:

 

Code:

TMy=class

x:integer;

procedure Proc(val:integer);

end;

 

procedure TMy.Proc(val:integer);

begin

x:=val;

end;

 

После компиляции это будет практически то же самое, что:

 

Code:

procedure Proc(self:TMy;val:integer);

begin

self.x:=val;

end;

 

 

То есть на самом деле в методе Proc обращаясь к x мы на самом деле обращаемся к self.x, просто переменная self опускается. В откомпилированном коде нет такого понятия как классы - есть только код и память. Все методы классов превращаются в обыкновенные функции, в которым качестве первого параметра передается указатель на область памяти где лежит созданный пользователем экземпляр класса, который они и используют для чтения или записи(а так же для вызова) того, что мы называем членами класса.

Code:

var

m1,m2:TMy;

begin

.....

m1.Proc(4); // -> Proc(m1,4)

m2.Proc(4); // -> Proc(m2,4)

end;

 

 

 

 

 

Автор:Fantasist

Взято с Vingradruhttps://forum.vingrad

Self может быть использовано только в методе класса, и ссылается на текущий экземпляр класса. Таким образом "Self" в методе класса TForm1 ссылается на текущий экземпляр TForm1. При создании компонента Вы передаете его владельца (owner) в конструктор. При уничтожении формы или компонента автоматически уничтожаются и все компоненты владельцем которого она является. Таким образом если при создании формы передать в качестве владельца Application эта форма будет автоматически уничтожена при уничтожении Application. Если же при создании формы передать в качестве владельца другую форму, вновь созданная форма будет автоматически уничтоженна при уничтожении формы-владельца.