Какова цель создания абстрактной функции класса - PullRequest
4 голосов
/ 09 ноября 2019

В Delphi я часто вижу такой код:

TmyClass = class
public
   class function getSomething: integer; virtual; abstract;
end;

Но какова цель такого объявления (то есть: функция класса), потому что вызов TmyClass.getSomething всегда будет неудачным, поскольку он не реализован,даже если это реализовано в дочернем классе.

1 Ответ

8 голосов
/ 09 ноября 2019

Сбой при прямом вызове TmyClass.getSomething, но может быть полезен в сочетании с метаклассами. Это дает вам возможность определять абстрактный API так же, как это делается в функциях, не относящихся к классу.

Например:

TmyClassClass = class of TMyClass;

TmyClass1 = class(TmyClass)
public
   class function getSomething: integer; override;
end;

var
  c: TmyClassClass;

  c := TmyClass1;
  c.getSomething;

Конечно, вы всегда можете использовать функции класса для экземпляров объекта, поэтому вызов getSomething для TMyClass1 экземпляра объекта также будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...