Что из себя представляет Self 2
Автор: Fantasist
WEB-сайт: http://forum.vingrad.ru
Чтобы понять, что такое self надо понять что такое метод класса. Метод класса - это просто функция(процедура) который имеет дополнительный неявный параметр - указатель на экземпляр класса. То есть:
TMy = class
x: integer;
procedure Proc(val: integer);
end;
procedure TMy.Proc(val: integer);
begin
x := val;
end;
После компиляции это будет практически то же самое, что:
procedure Proc(self: TMy; val: integer);
begin
self.x := val;
end;
То есть на самом деле в методе Proc обращаясь к x мы на самом деле обращаемся к self.x, просто переменная self опускается. В скомпилированном коде нет такого понятия как классы - есть только код и память. Все методы классов превращаются в обыкновенные функции, в которым качестве первого параметра передается указатель на область памяти где лежит созданный пользователем экземпляр класса, который они и используют для чтения или записи(а так же для вызова) того, что мы называем членами класса.
var
m1, m2: TMy;
begin
...
m1.Proc(4); // Proc(m1,4)
m2.Proc(4); // Proc(m2,4)
end;
|