Einzelnen Beitrag anzeigen

Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Wie einer Function einen 'Datentyp' übergeben??

  Alt 21. Okt 2005, 20:11
Hallo,
solange du in Records denkst wird das nix.
Du solltest in Objekten und Interfaces denken.
Ich würde Dein Problem wie folgt lösen:

Ich würde als Parameter ein Interface verwenden.
Delphi-Quellcode:
function Datentypgrösse(unbekannter_Datentyp : IMyInterface ):Integer; // kann ein Record integer usw. sein
var
rl:integer;
begin
         rl:=0;
         rl:=unbekannter_Datentyp.Size; //könnten ja alle möglichen Typen sein
         result:=rl ;

end;
IMyInterface würde dann wie folgt aussehen
Delphi-Quellcode:
  IMyInterface = Interface
  ['{06C033D1-76E2-452E-8F94-C4ED1DCA429F}']
  function Size : Integer;
  end;
Jetzt kannst Du jedes Objekt dass das IMyInterface implementiert als Parameter übergeben.

Schau Dir folgenden Code mal etwas genauer an:
Delphi-Quellcode:
  TMyObject = class(TInterfacedObject, IMyInterface)
  public
    function Size : Integer;
  end;

  TMyListObject = class(TListBox,IMyInterface)
  public
    function Size : Integer;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    function DataSize(aInterface : IMyInterface) : Integer;
  public
    { Public-Deklarationen }

  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }



{ TMyObject }

function TMyObject.Size: Integer;
begin
  Result:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  aObject : TMyObject;
  aListObject : TMyListObject;
begin
  aObject:=TMyObject.Create;
  DataSize(aObject); // Hier wird ein Objekt des Types TMyObject übergeben
  aObject.Free;

  aListObject:=TMyListObject.Create(Nil);
  DataSize(aListObject); // Hier wird ein Objekt des Types TMyListObject übergeben (eigentlich eine TListBox
  aListObject.Free;
end;

function TForm1.DataSize(aInterface: IMyInterface): Integer;
begin
  Result:=aInterface.Size;
end;

{ TMyListObject }

function TMyListObject.Size: Integer;
begin
  Result:=0;
end;

Ab D2005 würde ich die Möglichkeiten der ClassHelpers ausloten. (Habe bislang aber nur etwas darüber gelesen)
I come from outer space to save the human race
  Mit Zitat antworten Zitat