-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
23. Aug 2012
Folgender Vorschlag. Wirf diese Record-Geschichte über den Haufen und mach daraus eine Klasse. Dann klappt auch das mit dem Getter und du brauchst keinen Setter, da du ja nur Referenzen erhälst, wenn du via Item auf ein Config-Eintrag zugreifst. Für das Hinzufügen bzw. Löschen würde ich entsprechende Methoden in der TConfig-Klasse implementieren. Hier mal das, wie ich es mir gerade vorstelle:...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
23. Aug 2012
Viel wäre es ja nicht gewesen, sondern nur ein paar Zeilen. Nur leider hatte die Idee das gleiche Problem, wie du es im Moment hast.
Quick and Dirty könntest es so umbauen, dass du den folgenden Aufruf hast:
myConfig.Item := myConfig.Item.SetValue(2312);Schön ist aber was anders...
Würde dann eher vorschlagen, dass du der TConfig eine SetItemValue(Name: string; Value: Variant) Methode...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
23. Aug 2012
Du willst doch, dass es einfach funktioniert. Warum nimmst du dann nicht einfach das was ich geschrieben habe? Das was ich geschrieben habe, funktioniert nicht mal, da dann die Variable Key nicht mit übernommen wird. Shit...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
23. Aug 2012
Wenn du den Implicit-Operator überladen würdest, solltest du deine Setter-Methode so belassen können, wie du es hast. Mal schnell aus dem Kopf heraus aufgeschrieben:
TBlub = class
private
FRec : TMyRecord;
procedure SetRec(Value: TMyRecord);
public
property Rec : TMyRecord read FRec write SetRec;
end;
procedure TBlub.SetRec(Value: TMyRecord);
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
23. Aug 2012
Jo, habe übersehen, dass es sich um eine reine write-Property bei Value handelt. Sowas gibts bei mir nie, daher ging von einem read aus :stupid:
Guter Code benötigt (fast) keine Doku. Ich persönlich finde es praktischer, wenn mir IntelliSense sagt, welche Optionen ich denn zur Auswahl habe, anstatt in der Doku nachschauen zu müssen. Dann kann ich alles an Ort und Stelle auswählen nud sehe auch...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
23. Aug 2012
Aus welchem Grund will ich einen Boolean-Wert auf -1 abfragen? Was hat das denn mit Flexibilität zu tun? Es ist entweder ein Boolen oder ein Integer oder ein string. Gut, der einzige Vorteil, den ich gerade sehe ist, dass ich dem Variant auch eien Null-Wert geben kann, das lasse ich mir eingehen. Dafür gibts aber einen generischen Nullable-Typ, entweder einen selbst geschriebenen oder gleich der...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
23. Aug 2012
Ich sage doch nur, dass aus meiner Sicht, Variants nicht der Typsicherheit vorgezogen werden sollte -- es gibt ja in der Zwischenzeit auch nicht um sonst die Generics.
Klar gibt es Tests, aber die werden erst zur Laufzeit ausgeführt und nicht zur Compilezeit. Und es ist wohl schöner eine einfache Zuweisung zu haben, als dass ich mehrere Abfragen einbauen muss. Klar die Konvertierung beim...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
23. Aug 2012
Warum es erst zur Laufzeit krachen lassen, wenn mir schon der Compiler sagen kann, dass das was schief laufen wird? :gruebel: Läuft doch nur darauf hinaus, dass ich jeden Käse abfragen muss, bevor ich dann die eigentliche Variable nutzen kann. Und den Vorteil von den Variants sehe ich dann einfach nicht, tut mir Leid. Zudem erzeugst du so eher mehr Code und Unsicherheit, was es doch nicht brauch....
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
23. Aug 2012
Hast meinen Post oben schon gesehen?
Default-Werte solltest du im Konstruktor setzen. Dafür ist er da.
Und warum denn bitte Variant nehmen? Die ganze Typsicherheit geht verloren und du bekommst erst zur Laufzeit Probleme, da der Compiler die Typen nicht schon beim Compilieren prüfen kann.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by s.h.a.r.k,
23. Aug 2012
Schau dir dazu vielleicht auch mal die Operator-Überladung an, im speziellen Implicit. Damit bräuchtest du dann dieses AsString oder AsInteger nicht. Der Konvertierung würde dann alles automatisch funktionieren.
Besser für Refactoring wäre es, wenn du entsprechende Properties nutzen würdest. So handhabe ich das ganze -- momentan gibts den Code nur in VB.Net, portiere den aber bald nach Delphi:...