AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi "Abstrakter Fehler" schon zur Compile-Zeit unterbinden
Thema durchsuchen
Ansicht
Themen-Optionen

"Abstrakter Fehler" schon zur Compile-Zeit unterbinden

Ein Thema von DelphiBandit · begonnen am 13. Nov 2009 · letzter Beitrag vom 25. Apr 2012
 
Benutzerbild von DelphiBandit
DelphiBandit

Registriert seit: 19. Feb 2007
Ort: bei Walsrode
165 Beiträge
 
Delphi 10.4 Sydney
 
#1

"Abstrakter Fehler" schon zur Compile-Zeit unterbi

  Alt 13. Nov 2009, 10:28
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.
Carsten
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz