10

如何阻止超类中的函数/过程在 Delphi (2007) 的子类中被覆盖?

我想标记它以使其无法更改,我相信有一个 final 关键字,但我一生都找不到它的文档,所以我不能 100% 确定这就是我需要的。

4

2 回答 2

19

关键字final如你所想。请参阅http://dn.codegear.com/article/34324http://blogs.teamb.com/rudyvelthuis/2005/05/13/4311。您也可以将您的类标记为密封,以防止任何人继承它。你需要一个高于 7 的 Delphi 版本。

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

  TOtherClass = class(TSomeClass)
  protected
    procedure SomeVirtualMethod; override; final;
  end;
于 2008-10-03T14:59:59.010 回答
9

你是对的——它是“最终的”。这个片段显示了它。(来自Marco Cantu的一本书)

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

One thing that surprised me: This feature is supported in Win32 Delphi, not just Delphi for .NET

于 2008-10-03T15:07:58.963 回答