This was mentioned in the TLama comments, but there was never an answer, so I will answer that.
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;
This script also makes sense to create your own exception type.
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;
source share