![]() |
Feststellen ob abstrakte Methode existiert
Hallo,
Ich habe eine Klasse mit einer abstrakten Methode definiert. Kann ich zur Laufzeit feststellen, ob für eine konkrete Instanz eines Nachkommens dieser Klasse die abstrakte Methode implementiert ist und aufgerufen werden kann (abgesehen von try except, was vielleicht doch nicht ganz der feinen englischen Art entsprechen würde) Und - das wird wahrscheinlich nicht möglich sein - kann ich, wenn ich die Komponenten eines Formulars durchgehe, feststellen, für welche Komponenten eine Methode mit einem bestimmten Namen implementiert ist? |
AW: Feststellen ob abstrakte Methode existiert
Dafür müsstest du ein Interface deklarieren und darauf Prüfen
|
AW: Feststellen ob abstrakte Methode existiert
Sollte denn nicht schon der Compiler diesbezüglich eine Warnung rausgeben?
Allgemein gilt ja eigentlich, daß man sowieso keine Klassen mit abstrakten Methoden instantiieren soll. Blos weil Delphi sowas erlaubt, muß man dieses nicht gleich für irgendwas ausnutzen, welches sich eh besser lösen ließe. (andere Programmiersprachen sind da strenger und brechen schon beim Versuch ab, soein Objekt zu instantiieren) |
AW: Feststellen ob abstrakte Methode existiert
Nur Delphi hat halt dendas BugFeature, dass man Klassen mit abstrakten Methoden, anders wie in anderen Sprachen, instantiieren kann.
In neueren Delphiversionen kann man das aber verhindern |
AW: Feststellen ob abstrakte Methode existiert
Zitat:
|
AW: Feststellen ob abstrakte Methode existiert
Zitat:
![]() Zur Ursprungsfrage ![]() |
AW: Feststellen ob abstrakte Methode existiert
Zitat:
Delphi-Quellcode:
womit man eine ganze Klasse als Abstract kennzeichnen kann und diese sich dann (theoretisch) nicht mehr instantiieren läßt.
type
TAbstractClass = class abstract procedure SomeProcedure; end; (also Compiler-Error anstatt Compiler-Warning sollte ausgelöst werden, wenn man hiermit versucht ein Objekt zu erzeugen) |
AW: Feststellen ob abstrakte Methode existiert
Problematisch für Delphi sind dann aber Instanzierungen über Klassenreferenzen, also "class of TObject". Da sich hinter einer Klassenreferenz beliebige Klassen befinden können kann Delphi zur Compilezeit nur schlecht einschätzen, ob dort Klassen mit abstrakten Methoden verwendet instanziert werden.
Grüße, karlkoch |
AW: Feststellen ob abstrakte Methode existiert
Das Problem sollte theoretisch auch bei anderen Sprachen bestehen, wenn Objekte abgeleiteter Klassen Objekten von Basisklassen zugewiesen werden
|
AW: Feststellen ob abstrakte Methode existiert
Zitat:
Cheers, |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 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 by Thomas Breitkreuz