Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Abstrakte Methode und optionale Parameter (https://www.delphipraxis.net/79166-abstrakte-methode-und-optionale-parameter.html)

Dummbatz 17. Okt 2006 14:51


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:
procedure TForm1.Button1Click(Sender: TObject);
var
  locObj: TBasis;
begin

  locObj := TBerta.Create;
  ShowMessage(locObj.GetMyType);
  locObj.Free;

end;
Ein Klick auf Button1 liefert mir "Anton".
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.

Khabarakh 17. Okt 2006 14:58

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): ...

kolbaschedder 17. Okt 2006 15:04

Re: Abstrakte Methode und optionale Parameter
 
Delphi-Quellcode:


function TBerta.GetMyType: string;
  result := ClassType.ClassName;
end;
d.
Würde dir als Ergebnis den string "TBerta" zurückliefern.

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