![]() |
OOP und ihre Tücken...
Ich arbeite gerade an einem Dateisystem mit funktionen für Zip's etc, und bin darauf auf ein interessantes verhalten gestoßen:
Ich habe mehrere Klassen für eine Datei(noFile, noFile_Permanent, noFile_Memory, noFile_InZip), um eben die verschiedenen Instanzen von Dateien speichern zu können. Die letzten 3 erben nun wiederum von noFile. Hat man nun allerdings eine Prozedur a la:
Delphi-Quellcode:
Landet man, wenn man die Rückgabe dieser Prozedur anspricht, bei den Prozeduren der BasisKlasse noFile (z.B. habe ich eine Methode Length, die bei noFile = 0 zurückgibt, bei Permanet die Länge der Datei), statt bei denen von noFile_Permanent.
function GetOSFile: noFile;
begin Result := noFile_Permanent.Create; end; Nun zur eigentlichen Frage: Warum geht das überschreiben der Prozeduren verloren? Nach meinem Verständnis von OOP sollte man über das Ergebnis doch jetzt die (überschriebenen) Prozeduren von noFile_Permanent ansprechen. Warum ist das nicht so, oder was mache ich falsch? |
AW: OOP und seine tücken...
Ist das eine reguläre Funktion oder eine Methode? Falls Letzteres, wurde sie in der Basisklasse als virtuell deklariert und in der abgeleiteten überschrieben? Im Übrigen bin ich persönlich kein Freund von Funktionen, die eine Objektinstanz zurückgeben, die sie selbst erzeugen.
|
AW: OOP und seine tücken...
In der BasisKlasse ist die Prozedur virtual, und die abgeleiteten Klassen überschreiben die Prozedur dementsprechend...
|
AW: OOP und seine tücken...
Nunja, der Rückgabetyp ist ja nun einmal vom Typ noFile. Du könntest diesen aber nach dem Funktionsaufruf auf den "Untertyp" überprüfen. Oder man macht es ganz anders und übergibt noch einen Klassentypen, in der Art
Delphi-Quellcode:
type
noFileClass = class of noFile; function GetOSFile(aType: noFileClass): noFile; begin Result := aType.Create; end; |
AW: OOP und seine tücken...
Werd mal versuchen einen Klassentypen mit einzubauen...auch wenn das imho nicht nötig sein sollte / nichts ändern dürfte...mal schauen
[Edit] Habs drin gehabt mit klassentyp - keine Veränderung, dann nen Rollback gemacht, und jetzt Läufts...verstehe wer will, ich tus nicht, aber es läuft jetzt. |
AW: OOP und seine tücken...
Moin Detlef,
Zitat:
|
AW: OOP und seine tücken...
Moin Christian,
das ist etwas anderes, aber dann ist der Code auch ausführlicher ;). Als Negativbeispiel sehe ich z.B. GetFormImage an, da man die so ermittelte Instanz selbst freigeben muss, das ist IMO sehr unschön. |
AW: OOP und seine tücken...
Moin Detlef,
Zitat:
|
AW: OOP und seine tücken...
|
AW: OOP und seine tücken...
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 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