![]() |
Abstrakte Methode und optionale Parameter
Hallo zusammen!
ich hab gerade ein interessantes Problem mit abstrakten Methoden. Ich kann es mir erklären aber ich finde keine Lösung. Vielleicht kann mir jemand helfen:
Delphi-Quellcode:
unit UTypes;
interface type TMyType = (mtAnton, mtBerta, mtCaesar); TBasis = class function GetMyType(AMyType: TMyType = mtAnton): string; virtual; abstract; end; TBerta = class(TBasis) function GetMyType(AMyType: TMyType = mtBerta): string; override; end; implementation function TBerta.GetMyType(AMyType: TMyType = mtBerta): string; begin case AMyType of mtAnton: result := 'Anton'; mtBerta: result := 'Berta'; mtCaesar: result := 'Cäsar'; end; end; end.
Delphi-Quellcode:
Ein Klick auf Button1 liefert mir "Anton".
procedure TForm1.Button1Click(Sender: TObject);
var locObj: TBasis; begin locObj := TBerta.Create; ShowMessage(locObj.GetMyType); locObj.Free; end; Wäre locObj vom Typ TBerta bekäme ich "Berta". Das ist soweit klar! Jetzt bekomme ich locObj als Rückgabe einer Methode zurück. Es kann ein beliebiger Typ sein, der als Basisklasse TBasis hat, also ein TBerta, TCaesar und wie sie alle heissen. Ich will bzw. MUSS aber trotzdem bei einem TBerta "Berta" bekommen wenn ich locObj.GetMyType aufrufe. Wie kann ich das anstellen? MfG Thomas. |
Re: Abstrakte Methode und optionale Parameter
Das Ändern von Standard-Werten halte ich für keine gute Idee (weil es einfach kein wirklicher Teil der Polymorphie ist), aber an einem abstrakten Beispiel wie diesem kann ich keine Alternative vorschlagen. Umgehen könntest du jedenfalls die Problematik durch Aufteilen der Methode:
Delphi-Quellcode:
function GetMyType: ...
function GetMyType(aMyType: TMyType): ... |
Re: Abstrakte Methode und optionale Parameter
Delphi-Quellcode:
Würde dir als Ergebnis den string "TBerta" zurückliefern.function TBerta.GetMyType: string; result := ClassType.ClassName; end; d. MfG Kolbaschedder |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 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