Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Compilerverhalten bei nicht implementierten abstrakten Methoden (https://www.delphipraxis.net/196974-compilerverhalten-bei-nicht-implementierten-abstrakten-methoden.html)

Codehunter 5. Jul 2018 11:34

Compilerverhalten bei nicht implementierten abstrakten Methoden
 
Ahoi!

Wenn ich eine Basisklasse mit verschiedenen abstrakten Methoden baue und eine solche Methode in einer abgeleiteten Klasse nicht implementiere, bekomme ich eim Kompilieren eine Warnung im Log. Kann man irgendwo einstellen, dass statt der Warnung ein Fehler erzeugt wird? Ich möchte sozusagen die Implementierung erzwingen, andernfalls sich das Programm nicht übersetzen lässt. Ich meine mich dunkel zu erinnern, dass das früher bei Delphi 5 oder 7 das Standardverhalten war.

Besonders elegant wäre es, wenn ich dieses Verhalten per Compilerschalter abschnittsweise oder unitweise aktivieren könnte.

Grüße
Cody

mkinzler 5. Jul 2018 11:36

AW: Compilerverhalten bei nicht implementierten abstrakten Methoden
 
Jein. Man kann bei neuren Delphiversionen die Klasse als abtrakt delarieren, dann lässt sich der Quellcode ohne Implementierung nicht mehr kompilieren.

Codehunter 5. Jul 2018 11:39

AW: Compilerverhalten bei nicht implementierten abstrakten Methoden
 
Zitat:

Zitat von mkinzler (Beitrag 1406573)
Jein. Man kann bei neuren Delphiversionen die Klasse als abtrakt delarieren, dann lässt sich der Quellcode ohne Implementierung nicht mehr kompilieren.

Gib mir mal nen kleinen Schubs, ich hab grad hitzebedingte Denkblockade :roll:

himitsu 5. Jul 2018 11:48

AW: Compilerverhalten bei nicht implementierten abstrakten Methoden
 
Delphi-Quellcode:
= class abstact
statt
Delphi-Quellcode:
= class
.

Delphi-Quellcode:
class sealed
und irgendwas mit final gibt es auch noch.


[add] http://docwiki.embarcadero.com/RADSt...es_and_Objects
http://docwiki.embarcadero.com/RADSt...jekte_(Delphi)


@mk
Zitat:

Hinweis: Delphi lässt die Instantiierung einer als abstract deklarierten Klasse aus Gründen der Abwärtskompatibilität zu, aber dieses Feature sollten nicht mehr verwendet werden.

mkinzler 5. Jul 2018 11:51

AW: Compilerverhalten bei nicht implementierten abstrakten Methoden
 
Delphi-Quellcode:
  TAbtract = class
    procedure Proc1; virtual; abstract;
  end;

  TStrictAbstract = class abstract
    procedure Proc1; virtual; abstract;
  end;
Aber kompilieren lässt sich das immer noch. Es knallt halt früher.

Codehunter 5. Jul 2018 11:55

AW: Compilerverhalten bei nicht implementierten abstrakten Methoden
 
Zitat:

Zitat von mkinzler (Beitrag 1406578)
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.

Fritzew 5. Jul 2018 12:00

AW: Compilerverhalten bei nicht implementierten abstrakten Methoden
 
In den Projektoptionen Hinweise und Warnungen
kannst Du die Warnung auf Fehler stellen dann sollte es knallen.

Codehunter 5. Jul 2018 12:10

AW: Compilerverhalten bei nicht implementierten abstrakten Methoden
 
Zitat:

Zitat von Fritzew (Beitrag 1406581)
In den Projektoptionen Hinweise und Warnungen
kannst Du die Warnung auf Fehler stellen dann sollte es knallen.

Da kann ich die Warnung ein- und ausschalten (true/false). Eine Umstellmöglichkeit auf Fehler sehe ich nicht.

Fritzew 5. Jul 2018 12:14

AW: Compilerverhalten bei nicht implementierten abstrakten Methoden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bei mir sieht das so aus!

Eventuell ist das in der Starter anders?

Der schöne Günther 5. Jul 2018 12:16

AW: Compilerverhalten bei nicht implementierten abstrakten Methoden
 
Projektoptionen -> Delphi-Compiler -> Hinweise und Warnungen -> Ausgabewarnungen -> "Konstruierende Instanz enthält abstrakte Methode" => Auf "Fehler" einstellen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.
Seite 1 von 2  1 2      

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