Delphi-PRAXiS

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.

Codehunter 5. Jul 2018 13:25

AW: Compilerverhalten bei nicht implementierten abstrakten Methoden
 
Zitat:

Zitat von Fritzew (Beitrag 1406584)
Eventuell ist das in der Starter anders?

Oh! Oh! Oh! Da war ja was :-) Ich bin ja seit dieser Woche bei einem neuen Arbeitgeber und da gibts jetzt eine Subscription. Welch ein ungewohnter Luxus! Gleich mal mein Profil aktualisiert! ;-) </OT>

Nein du hast natürlich Recht. Das war mein Fehler. Ich habe immer auf die Zeile gedoppelklickt und da springt der nur zwischen true und false hin und her. Wenn man die Liste aufklappt, gibts da auch ein "Fehler". Ich denke es ist einfach zu warm heute.

Danke euch, damit ist das von mir gewünschte Verhalten tatsächlich erzielbar.

freimatz 5. Jul 2018 14:42

AW: Compilerverhalten bei nicht implementierten abstrakten Methoden
 
Zitat:

Zitat von Codehunter (Beitrag 1406594)
Ich denke es ist einfach zu warm heute.

Gibts bei deinem neuen Arbeitgeber keine Klima? SCNR
(wie dem auch sei Subscription wäre mir auch wichtiger)

Codehunter 6. Jul 2018 00:14

AW: Compilerverhalten bei nicht implementierten abstrakten Methoden
 
Zitat:

Zitat von freimatz (Beitrag 1406600)
Zitat:

Zitat von Codehunter (Beitrag 1406594)
Ich denke es ist einfach zu warm heute.

Gibts bei deinem neuen Arbeitgeber keine Klima? SCNR

Wenn du wüsstest was es bei meinem alten Arbeitgeber alles nicht gab, könntest du verstehen dass mich das als allerletztes interessiert hat :twisted:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz