Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: TObjectlist in TObjectList

  Alt 2. Jul 2006, 10:13
Zitat von mimi:
zum With: ich wollte es auch weglassen nur dann kamm ein compiler fehler:
"Linkeseite kann nicht zugewisen werden." das habe ich auch nicht ganzso verstanden. und mit with hat es halt geklappt darum....
Das der linken Seite nichts zugewiesen werden kann, sagt der Compiler einfach dann, wenn die linke Seite nicht variabel ist. Das kann ein read-only Property sein, eine Konstante oder Ähnliches. Das würde dann allerdings auch nicht mit With klappen. Und hier liegt das Problem, das With ersetzt ja nur ein Präfix auf der linken Seite (ggf.). Nun ist das Problem, dass du recht schnell nicht mehr weißt was eigentlich auf der linken Seite steht (da die volle Quailifizierung einfach fehlt).

Zitat von mimi:
Ich schreibe in einem team ein grafikprogramm und wenn ich es jetzt umstelle auf OOP können wir gleich von vorne anfangen das wollten wir nicht(ich schon aber)...
Ja, was soll ich dazu noch sagen, solange ihr voran kommt und es läuft. Möchte jetzt nicht besser-wisserisch klingen, aber es gibt so ein paar Dinge, die haben es echt in sich. Ich kann es bei euerm Programm nicht beurteilen, aber man schiebt halt gerne Probleme auf. Je komplexer ein Problem scheint, desto weiter nach hinten schiebt man es und macht erstmal dass, was man leicht lösen kann. Ganz schnell sieht man den Fortschritt (was einen natürlich super motiviert!) und dann kommt irgendwann mal der Punkt, an dem nur noch die großen Probleme warten. Nun ja, je mehr man schon gemacht hat, desto aufwändiger ist das neu-anfangen.
Bei euerm Grafikprogramm kommt der Punkt vielleicht nie und hätte wahrscheinlich auch weniger wilde Konsequenzen, aber wenn es an einem Feature scheitert, dass ein Kunde bezahlt hat...
Also klar, man kann auch heute noch super Programme ohne OOP produzieren, aber es gibt ja Ideen hinter der (sinnvollen) Verwendung und Modellierung mit Objekten. Und mit etwas Erfahrung kann man dort sehr schön sehr mächtigen Code erzeugen (leicht erweiterbar durch Verhaltens- und Objektvererbung).

Gerade wenn ihr im Team arbeitet sollten alle Variablen sofort sinnvoll benannt werden. Es blickt ab einem gewissen Punkt sonst keiner mehr durch (glaub mir, hab da so einige Erfahrung aus eben solchen vermeidbaren Fehlern, die ich mitverschuldet habe).
Sind aber alles nur persönliche Erfahrungen und Meinungen, soll wirklich nur als Anregung nicht als Kritik verstanden werden. Wie gesagt, es geht auch ohne!

Zitat von mimi:
aber warum hat das mit meiner idee nicht geklappt. Ich hatte doch eine prüfung <> nil gemacht
Du prüfst nur ob eine Liste vorhanden ist. Diese Liste kann aber leer sein. Das heißt du hast eine Liste (ok, geprüft) die hat 0 Elemente (das prüfst du nie) und du willst jetzt das erste von diesen 0 Elementen nehmen (du siehst das Problem?)

Zitat von mimi:
die erste ist im Hauptprogramm defniert und die weitere ist in TStyle defniert.... und installsiert wird sie in der Create procedure.
Ok, da ich mir immer noch nicht 100%ig sicher bin, möchte ich an dieser Stelle nur kurz sagen TList <> TObjectList! Dies ist ein wirklich wichtiger Unterschied. Einer TList kannst du nur Zeiger zuweisen. Hier musst du dann wirklich aufpassen, dass der Speicherbereich auf den du zeigst nicht schon irgendwo frei gegeben wurde. Wenn du dir mit New neue Records anlegst, dann hast du diese Sicherheit (und solltest tunlichst auf's freigeben des Speicherbereichs achten). Legst du aber nur eine lokale Variable an und trägst die Speicheradresse dieser lokalen Variable mehrfach als unterschiedliche Elemente (mehrere Aufrufe der Methode) in eine TList ein, du würdest nicht bekommen was du gerne hättest.
Eine TObjectList hingegen speichern nur Instanzen von Klassen. Da jede Klasse von TObject abgeleitet ist, kannst du hier also wirklich Instanzen aller Klassen speichern (musst entsprechend nur casten). Da jedes TObject (und damit alle Nachfahren) auch einen Destruktor haben, kann sich eine TObjectList auch gleich um die freigabe der gespeicherten Objekte kümmern.
Da du sagtest du hast eine weitere TList, ging ich jetzt also von zwei TList Instanzen aus, nicht zwei TObjectList Instanzen. Klingt jetzt vielleicht ein wenig kleinlich, aber es ist ein wirklich wichtiger Unterschied (was die Benutzung angeht), denn während du in einer TList einen Zeiger auf alles speichern kannst, kannst du nicht jeden Zeiger als Objekt in einer TObjectList ablegen sondern eben nur Objekte.
  Mit Zitat antworten Zitat