AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi inherited und die EAbstractError-Exception

inherited und die EAbstractError-Exception

Ein Thema von Der schöne Günther · begonnen am 22. Mär 2013 · letzter Beitrag vom 22. Mär 2013
Antwort Antwort
Seite 1 von 2  1 2   
Der schöne Günther

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

inherited und die EAbstractError-Exception

  Alt 22. Mär 2013, 12:10
Delphi-Version: XE2
*Vorhänge zuzieh*

Meine Damen und Herren, ich präsentiere Ihnen ... das dunkle Geheimnis von inherited .

Zur Wiederholung zitiere ich zwei bekannte Größen unter Ihnen:

inherited ohne Methodename nutzt automatisch den selben Namen, wie die übergeordnete Methode, inkl. aller Parameter.
Gut für eine überschriebene Methode, mit der selben Parametersignatur und mit den selben Parameterwerten.

Mit Namen wird genau die eine Version verwendet, und man muß Parameter selber übergeben.
inherited; ruft die identische Methode der Superklasse auf.
inherited Create(AComponent); ruft fest Create(AComponent); auf.

Was mich hierbei nur wundert: Ist die Methode der Oberklasse nun abstrakt - Dann macht ein einfaches inherited schlichtweg nichts. Setze ich einen Haltepuntk darauf geht der kaputt - Der Compiler scheint es wohl von sich bereits herauszunehmen.

Rufe ich die abstrakte Methode der Oberklasse über inherited jedoch mit ihrem Namen und Parametern auf laufe ich (verständlicherweise) auf einen EAbstractError .


Warum diese unterschiedlichen Verhaltensweisen? Gibt es eine Compiler-Direktive mit der ich diese gut gemeinte Hilfe ausschalten kann?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: inherited und die EAbstractError-Exception

  Alt 22. Mär 2013, 12:29
warum willst Du denn eine abstrakte und somit nicht implementierte Methode aufrufen?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: inherited und die EAbstractError-Exception

  Alt 22. Mär 2013, 12:33
Vielleicht weiß ich ja garnicht, ob meine Oberklasse noch abstrakt ist oder nicht?
  Mit Zitat antworten Zitat
sahimba

Registriert seit: 14. Nov 2011
Ort: Berlin, Hauptstadt der DDR
137 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: inherited und die EAbstractError-Exception

  Alt 22. Mär 2013, 12:35
warum willst Du denn eine abstrakte und somit nicht implementierte Methode aufrufen?
...weil diese möglicherweise später einmal mit Fleisch gefüllt wird?
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: inherited und die EAbstractError-Exception

  Alt 22. Mär 2013, 12:58
Vielleicht weiß ich ja garnicht, ob meine Oberklasse noch abstrakt ist oder nicht?
Aber der Compiler weiss es und es scheint so zu sein, dass er den Programmierer davor bewahrt eine abstrakte Methode aufzurufen.
Gibt man die Parameter explizit an, "denkt" der Compiler: "ok, er scheint zu wissen was er tut. Also rufe ich den ererbten Kontruktor auf auch wenn er abstrakt ist".

It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.734 Beiträge
 
Delphi 2007 Professional
 
#6

AW: inherited und die EAbstractError-Exception

  Alt 22. Mär 2013, 12:59
warum willst Du denn eine abstrakte und somit nicht implementierte Methode aufrufen?
...weil diese möglicherweise später einmal mit Fleisch gefüllt wird?
Genau. Das Verhalten ist ein Fallstrick für die Zukunft.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: inherited und die EAbstractError-Exception

  Alt 22. Mär 2013, 13:02
Gibts eigentlich Compilerwarnungen/hinweise?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: inherited und die EAbstractError-Exception

  Alt 22. Mär 2013, 13:04
Nein.

Ich habe mir sogar die Warnung Konstruierende Instanz enthält abstrakte Methode manuell in einen Compilerfehler verwandelt.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: inherited und die EAbstractError-Exception

  Alt 22. Mär 2013, 13:26
Zitat:
Genau. Das Verhalten ist ein Fallstrick für die Zukunft.
mir ging es nicht darum das inherited zu entfernen (welches ja das gewünschte Verhalten sicherstellt) sondern darum warum man inherited mit parametern aufrufen will.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.734 Beiträge
 
Delphi 2007 Professional
 
#10

AW: inherited und die EAbstractError-Exception

  Alt 22. Mär 2013, 13:36
Zitat:
Genau. Das Verhalten ist ein Fallstrick für die Zukunft.
mir ging es nicht darum das inherited zu entfernen (welches ja das gewünschte Verhalten sicherstellt) sondern darum warum man inherited mit parametern aufrufen will.
Das einfache inherited; hat für mich den schweren Nachteil, dass man nicht per Strg-Klick zur Implementierung springen kann. Darum schreibe ich möglichst immer die lange Form.
Uli Gerhardt
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:27 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