stensrbr Ответов: 1

В delphi/objectpascal - разница между "процедурой somemethod()" и "процедурой класса somemethod()"


У меня возникают трудности с пониманием разницы между следующими (аналогичными) определениями процедур. Кроме того, мне интересно, как определить, когда и почему использовать 2-е определение.

#1 - стандартное определение рутины
type
  TFigure = class
  public
     function Supports(Operation: string): Boolean; virtual;
     procedure GetInfo(var Info: TFigureInfo); virtual;
     ...
  end;


#2 - рутина, предваряемая ключевым словом "класс"
type
  TFigure = class
  public
     class function Supports(Operation: string): Boolean; virtual;
     class procedure GetInfo(var Info: TFigureInfo); virtual;
     ...
  end;


Что я уже пробовал:

Я погуглил эту тему и не могу найти простого, прямого определения того, когда/почему использовать ключевое слово "класс".

2 примера в моем вопросе были взяты с сайта Embarcadero - я просто удалил "класс" для примера №1. Я не видел никакой документации re: конкретные различия или когда/почему предисловие с ключевым словом "класс".

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

б.

1 Ответов

Рейтинг:
9

Peter Turtle

Методы (процедуры / функции) без спецификатора "class" являются обычными методами, которые являются частью любого экземпляра класса, тогда как методы со спецификатором "class" являются методами самого класса, а не экземпляра класса.