Методы класса и статические методы

Вверх  Предыдущий  Следующий

Методы класса или методы, объявленные директивой static (статические), являются глобальными по отношению к объекту. В них недоступен неявный указатель 'self'. Недоступны, так-же обычные методы (их нельзя вызывать) и поля объекта. Но могут быть использованы переменные класса.

Методы класса или статические методы являются регулярными, они могут быть назначены процедурным переменным.

Следующая программа демонстрирует это. Закомментированные операторы компилироваться не будет.

{$APPTYPE CONSOLE}

{$IFDEF FPC}{$MODE DELPHI}{$H+}{$ENDIF}

type

TTest = object

  const Epsylon = 100;

  var f : integer;

  class var cv1,cv2:integer;

  procedure myproc;

  class procedure testproc;

  class procedure testproc2;static;

  procedure testproc3; static;

end;

 

procedure TTest.myproc;

begin

  cv1:=0;

  f:=1;

end;

 

class procedure TTest.Testproc;

begin

  cv1:=1;

  // f:=1;

end;

 

class procedure TTest.Testproc2;

begin

  cv1:=2;

  // f:=1;

end;

 

procedure TTest.Testproc3;

begin

  cv1:=3;

  // f:=1;

end;

 

Var

P : Procedure;

begin

P:=@TTest.Myproc;

P:=@TTest.Testproc;

P:=@TTest.Testproc2;

P:=@TTest.Testproc3;

end.

Раскоментируюте любой оператор и попытка компиляции приведёт к ошибке компиляции.

ocv.pp(32,6) Error: Only class methods, class properties and class variables can be accessed in class methods

ocv.pp(32,6) Ошибка: В методах класса  доступны только методы класса, свойства класса и переменные класса