Aber kompilieren lässt sich das immer noch. Es knallt halt früher.
Genau deswegen fragte ich ja. Hier mein Versuch, der sich aber auch problemlos übersetzen lässt und erst eine Runtime-
Exception wirft wenn man die abstrakte Methode aufruft. Im Grunde also kein anderes Verhalten als bei nicht abstrakter Basisklasse. Insofern sehe ich grad den Unterschied nicht.
Delphi-Quellcode:
unit Unit1;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs;
type
TBasis =
class abstract (TObject)
protected
procedure Foo;
virtual;
abstract;
end;
TKind =
class (TBasis)
end;
TForm1 =
class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
K: TKind;
begin
K:= TKind.Create;
K.Foo;
// <-- EAbstractError
K.Free;
end;
end.