How to define a base class which must be inherited?
我已经创建了一个组件,它的本身不应该被实例化,而是必须被继承。类似于
在XE2中,可以将类声明为抽象类:
1 | type TMyclass = class abstract (TAncestor) |
upd:看起来Delphi仍然允许创建抽象类(尽管一些版本的文档说它不允许)。不过,编译器应该给出警告。
可能您的类有一些必须重写的虚拟方法(这就是为什么它必须从继承的原因)。如果是这样,只需使方法
TLAMA在评论中提到了这一点,但从来没有人回答过,所以我会回答这个问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | type TEvilClass = class public constructor Create; end; TGoodClass = class(TEvilClass) end; { TEvilClass } constructor TEvilClass.Create; begin if ClassType = TEvilClass then raise Exception.Create('I''m the evil class which cannot be instantiated!'); end; procedure TForm1.Button1Click(Sender: TObject); var EvilClass: TEvilClass; begin EvilClass := TEvilClass.Create; end; procedure TForm1.Button2Click(Sender: TObject); var GoodClass: TGoodClass; begin GoodClass := TGoodClass.Create; end; |
号
这个场景对于创建自己的异常类型也是有意义的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | type EvilClassException = Exception; TEvilClass = class(TComponent) public constructor Create(AOwner: TComponent); override; end; ... constructor TEvilClass.Create(AOwner: TComponent); begin inherited; if ClassType = TEvilClass then raise EvilClassException.Create('I''m the evil class which cannot be instantiated!'); end; |