![]() |
AW: Generics richtig verstanden?
Jetzt bin ich baff. Bei Postleitzahlen ist also 00300 nicht gleich 300? Und warum sollte man es als String ablegen? Die Dinger sind seit 1944 Zahlen.
|
AW: Generics richtig verstanden?
bleibt es nun bei:
Delphi-Quellcode:
?
type
TPostleitzahl = Integer; TOrtsName = String; So jedenfalls habe ich es nun zum laufen gebracht. Interessante Problematik. Das hängt doch auch mit der TObjectlist bzw. TList zusammen bzw. ist dies auch Teil von System.Generics.Collections? Ich werde mir das ganze mal genauer ansehen. Gibt es dazu möglicherweise ein gutes Tutorial? Ich danke Euch für die bisherige Hilfe. |
AW: Generics richtig verstanden?
Moin...:P
Zitat:
|
AW: Generics richtig verstanden?
Zitat:
vgl. ![]() Ähnlich ist z.B. die Dezimalklassifikation. @EDAdvokat Mach aus der Postleitzahl einen "Postcode"-String. Falls Du wirklich eine Zahl benötigst, spendier dafür ein extra Feld. Gruß K-H |
AW: Generics richtig verstanden?
Zitat:
Delphi-Quellcode:
oder so. Dann kannst du auch auf das Objekt Postleitzahlen zugreifen. Ich vermute mal, dass war hier im Editor runtergetippt. 8-)
InitPostleitzahlen()
|
AW: Generics richtig verstanden?
Habe in #12 den erfolgreichen Versuch auch mit der Bezeichnung procedure Postleitzahlen() mitgeteilt. Es läuft prima und ich experimentiere nun ein wenig, nachdem ich mal in System.Generics.Collections herumgeschnüffelt habe. Verdammt kompliziert und für mich noch nicht so erhellend. Nun bin ich dabei mit Hilfe von Tante Google mein schwaches neu angeeignetes Wissen ggf. mit Beispielen zu vertiefen. Es ist für mich in erster Linie eine theoretische Übung, denn einen wirklichen Anwendungsfall kann ich bislang für mich noch nicht erkennen;wird wohl noch kommen.
|
AW: Generics richtig verstanden?
Moin...8-)
...schicke mal den Quelltext des Beispiels. in #15 sind einige Fehler drin. (keine Objektfreigabe! etc.) |
AW: Generics richtig verstanden?
Habe postleitzahlen frei gegeben. Hoffentlich richtig.
Delphi-Quellcode:
unit uMain;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Contnrs, System.Generics.Collections, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) btn1: TButton; btnKey: TButton; edtKey: TEdit; btnInhalt: TButton; edtInhalt: TEdit; lblKey: TLabel; lblValue: TLabel; btnpostleitzahl: TButton; procedure btn1Click(Sender: TObject); procedure btnKeyClick(Sender: TObject); procedure btnInhaltClick(Sender: TObject); procedure btnpostleitzahlClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TPair<TKey,TValue> = class // TKey. TValue type parameters FKey: TKey; FValue: TValue; function GetValue: TValue; function GetKey: TKey; procedure setValue(V:TValue); procedure setKey(K:TKey); constructor create; destructor Destroy;override; property Key:TKey read FKey write FKey; property Value:TValue read FValue write FValue; end; type TSIPair = TPair<String,Integer>; // declares instantiated type TSSPair = TPair<String,String>; // declares with other data types TISPair = TPair<Integer,String>; TIIPair = TPair<Integer,Integer>; type TCustomer = Record postCode : string[8]; end; var Form1: TForm1; implementation {$R *.dfm} { TPair<TKey, TValue> } constructor TPair<TKey, TValue>.create; begin inherited create; end; destructor TPair<TKey, TValue>.Destroy; begin inherited; end; function TPair<TKey, TValue>.GetKey: TKey; begin Result:=FKey end; function TPair<TKey, TValue>.GetValue: TValue; begin Result := FValue; end; procedure TPair<TKey, TValue>.setKey(K: TKey); begin FKey:=K; end; procedure TPair<TKey, TValue>.setValue(V: TValue); begin FValue:=V; end; procedure TForm1.btn1Click(Sender: TObject); begin close; end; procedure TForm1.btnKeyClick(Sender: TObject); var Key: TPair<string,integer>; TSS: TSSPair; //typ parameter zuweisen bsp. string oder integer begin //string zugewiesen Key:=TPair<string,integer>.create; try Key.Key:=edtKey.Text; lblKey.caption:=Key.Key; TSS:=TSsPair.create; //string zugewiesen TSS.Value:='Dies ist ein Test'; ShowMessage(TSS.Value); //ShowMessage(Key.Key); finally freeandNil(Key); FreeAndNil(TSS); end; end; procedure TForm1.btnInhaltClick(Sender: TObject); var Inhalt: TPair<string,integer>; //integer zugewiesen TSI:TSIPair; begin Inhalt:=TPair<string,integer>.create; try Inhalt.Value:=strtoint(edtInhalt.text); lblValue.caption:=inttostr(Inhalt.Value); TSI:=TSIPair.create; //integer zugewiesen TSI.Value:=523; ShowMessage(inttostr(TSI.Value)); //ShowMessage(inttostr(Inhalt.Value)); finally FreeAndNil(Inhalt); FreeAndNil(TSI); end; end; { TDictionary<TKey, TValue> } procedure postleitzahlen; type TPostleitzahl = string; //vorher integer aber führende Null!!! TOrtsName = String; var postleitzahlen: TDictionary<TPostleitzahl, TOrtsName>; begin try postleitzahlen := TDictionary<TPostleitzahl, TOrtsName>.Create(); 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; procedure TForm1.btnpostleitzahlClick(Sender: TObject); begin postleitzahlen; end; end. |
AW: Generics richtig verstanden?
...puhhh. :wink:
Ich sehe schon, daß du von der alten Schule bist. :wink: Records mit Shortstring benutzt keiner mehr...es sei denn es gibt einen triftigen Grund. :P Wie die anderen schon sagten... warum deklariert du TPair neu? In GenericsCollections sind alle deklariert. :wink: Ich schreib das eben mal um, daß du siehst was du doppelt implementiert hast. |
AW: Generics richtig verstanden?
Da habe ich mich streng an die Vorschläge von Embarcadero zu generics gehalten und diese Beispiele nur ausformuliert und nun ist das auch schon veraltet.
Aber Danke, dass Du mir wieder mal auf die Sprünge hilfst. ( ![]() ![]() Das war das erste was ich zu generics fand und das habe ich wohl auch verstanden. Ich bin gespannt auf Deine Änderungen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 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