Остановка функции, которая была переопределена в Delphi - PullRequest
8 голосов
/ 03 октября 2008

Как остановить функцию / процедуру в суперклассе, которая была переопределена в подклассе в Delphi (2007)?

Я хочу пометить его, чтобы его нельзя было изменить, я думаю, что есть последнее ключевое слово, но я не могу найти документацию для него, поэтому я не уверен на 100%, что это то, что мне нужно. *

Ответы [ 2 ]

17 голосов
/ 03 октября 2008

Ключевое слово final, как вы и думали. См. http://dn.codegear.com/article/34324 и http://blogs.teamb.com/rudyvelthuis/2005/05/13/4311. Также вы можете пометить свой класс как запечатанный, чтобы никто не унаследовал его. Вам нужна версия Delphi выше 7.

type
  TSomeClass = class
  protected
    procedure SomeVirtualMethod; virtual;
  end;

  TOtherClass = class(TSomeClass)
  protected
    procedure SomeVirtualMethod; override; final;
  end;
9 голосов
/ 03 октября 2008

Ты прав - это "финал". Этот фрагмент показывает это. (из одной из книг Марко Канту )

type
  TDeriv1 = class (TBase)
    procedure A; override; final;
  end;

  TDeriv2 = class (TDeriv1)
    procedure A; override; // error: "cannot override a final method"
  end;

Компиляция дает:

[Pascal Error] Unit1.pas(11): E2352 Cannot override a final method

Одна вещь, которая удивила меня: эта функция поддерживается в Win32 Delphi, а не только Delphi для .NET

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