AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie einer Function einen 'Datentyp' übergeben??
Thema durchsuchen
Ansicht
Themen-Optionen

Wie einer Function einen 'Datentyp' übergeben??

Ein Thema von Net7 · begonnen am 21. Okt 2005 · letzter Beitrag vom 23. Okt 2005
Antwort Antwort
Benutzerbild von Jens Schumann
Jens Schumann

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

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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:11 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