Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
Delphi 12 Athens
|
AW: Generics richtig verstanden?
13. Mai 2018, 07:04
Moin...
Wenn ich
Delphi-Quellcode:
type
TPair<TKey,TValue> = class // TKey. TValue type parameters
FKey: TKey;
FValue: TValue;
end;
aufnehme und Key zu FKey und Value zu FValue ändere läuft es.
...diese Deklaration brauchst du nicht neu zu implementieren! Das Original tut´s auch.
Zitat:
TIIPair = TPair<Integer, Integer>;
bleibt da noch.
...das sind ja auch Typdeklarationen die nur TPair<xxx,xxx> repäsentieren...um im Quelltext Schreibarbeit zu sparen oder es übersichtlicher zu machen.
Zitat:
Es hängt jeweils beim .create mit dem Hinweis "nicht genügend wirkliche Parameter".
...wo genau?
Beispiele:
Delphi-Quellcode:
unit Form.Main;
interface
uses
Winapi.Windows, Winapi.Messages,
System.SysUtils, System.Variants, System.Classes, System.Generics.Collections,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TfoMain = class(TForm)
btnPostCode: TButton;
procedure btnPostCodeClick(Sender: TObject);
private
public
end;
var
foMain: TfoMain;
implementation
{$R *.dfm}
procedure TfoMain.btnPostCodeClick(Sender: TObject);
var
Postleitzahlen: TDictionary< string, string>;
begin
Postleitzahlen := TDictionary< string, string>.Create;
try
Postleitzahlen.Add(' 53639', ' Königswinter');
Postleitzahlen.Add(' 53117', ' Bonn1');
Postleitzahlen.Add(' 53111', ' Bonn');
ShowMessage(' Die Postleitzahl für 53639 ist');
ShowMessage(Postleitzahlen[' 53639']);
finally
FreeAndNil(Postleitzahlen);
end;
end;
end.
Delphi-Quellcode:
unit Form.Main;
interface
uses
Winapi.Windows, Winapi.Messages,
System.SysUtils, System.Variants, System.Classes, System.Generics.Collections,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TMyPostCodeDictionary = TDictionary< string, string>; // eigene Deklaration
TfoMain = class(TForm)
btnPostCode: TButton;
procedure btnPostCodeClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FMyPostCodeDictionary: TMyPostCodeDictionary;
public
end;
var
foMain: TfoMain;
implementation
{$R *.dfm}
procedure TfoMain.FormCreate(Sender: TObject);
begin
FMyPostCodeDictionary := TMyPostCodeDictionary.Create;
end;
procedure TfoMain.FormDestroy(Sender: TObject);
begin
FMyPostCodeDictionary.Free;
end;
procedure TfoMain.btnPostCodeClick(Sender: TObject);
begin
FMyPostCodeDictionary.Add(' 53639', ' Königswinter');
FMyPostCodeDictionary.Add(' 53117', ' Bonn1');
FMyPostCodeDictionary.Add(' 53111', ' Bonn');
ShowMessage(' Die Postleitzahl für 53639 ist');
ShowMessage(FMyPostCodeDictionary[' 53639']);
end;
end.
Geändert von haentschman (13. Mai 2018 um 07:33 Uhr)
|
|
Zitat
|