Hallo zusammen,
wenn ich eine Grundklasse mit abstrakten virtuellen Methoden ableite und diese dann in der erbenden Klasse nicht deklariere, bekomme ich den Fehler erst als Laufzeitfehler "Abstrakter Fehler" mitgeteilt.
Gibt es keine Möglichkeit den Compiler (hier RS 2007) zu überreden mich auf solche Unstimmigkeiten hinzuweisen? Bekomme eine Warnung vom Compiler, dass eine Instanz mit abstrakten Methoden angelegt wird. Aber keinen Compiler-Fehler. Oder ein Keyword was eine Ableitung zwingend erforderlich macht?
Andere Möglichkeit wäre der Einsatz eines Interface, dieses macht die Implementierung in den nutzenden Objekten erforderlich, aber das ist mir ein wenig viel Overhead mit der internen Zählung etc. Eigentlich nicht notwendig für meine einfachen Objekte.
Bin für jeden Tipp dankbar
Carsten
----
Beispiel (nein, aase normalerweise nicht mit globalen Var's und initialization/finalization herum - wollte mir nur weitere Events wie OnCreate sparen) -> siehe //
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TGrundklasse =
class(TObject)
private
function FunktionEins: Boolean;
virtual;
abstract;
end;
TAbleitung =
class(TGrundklasse)
private
function FunktionEins: Boolean;
override;
// Diese Zeile kommentieren -> "Abstrakter Fehler"
end;
TForm1 =
class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
tobj: TAbleitung;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
tobj.FunktionEins;
end;
{ TAbleitung }
// Hier auch kommentieren
function TAbleitung.FunktionEins: Boolean;
begin
MessageDlg('
Funktion ist deklariert und funktioniert', mtInformation, [mbOK], 0);
Result := True;
end;
initialization
tobj := TAbleitung.Create;
finalization
tobj.Free;
end.