Mit Konstruktor erzeugte Objekte in Liste speichern

Moin,

zerbreche mir gerade den Kopf darüber und komme einfach zu keiner Lösung - das Internet hilft mir ausnahmsweise leider auch nicht so recht weiter.

Und zwar würde ich gerne ein per Konstruktor erzeugtes Objekt direkt in meine Liste speichern. Frage:

  1. Würde das liste.Add() gerne in den Konstruktor schreiben (so stelle ich es mir am einfachsten vor). Ist das möglich(bzw. notwendig)?

  2. Was schreibe ich als Parameter in die Klammern?

Habe in zahlreichen Tutorials gefunden wie ich bspw. einen String einer Liste hinzufüge - toll. Nun habe ich aber eine Reihe an Objekten von unbestimmter Länge, die erst per Konstruktor erzeugt werden und direkt in der bereits angelegten Liste abgelegt werden sollen.

Bekomme das nicht so recht umgedacht, hoffe auf rege Unterstützung.

Grüße

Hallo,

in den meisten Fällen bricht dieses Vorgehen die Separation of Concerns. Eigentlich sind die Objekte, die du erzeugst, doch gar nicht dafür zuständig, sich in irgendeine Liste einzutragen. Ausnahmen kann es natürlich immer geben. Teilweise ist das für globale Listen sinnvoll. Wobei dann aber wieder das Problem besteht, dass globale Variablen in vielen Fällen von schlechtem Design zeugen.
Trage die Objekte lieber an derselben Stelle in die Liste ein, wo du sie auch erzeugst. Das scheint bei der knappen Informationslage das sinnvollste zu sein. Wenn du noch ein bisschen mehr zu deinem Szenario schreibst, können wir gern noch mal darüber diskutieren.

Nico

GUI-Elemente tragen sich z.B. in die Child- (oder Component-)Liste des Parent-Objektes ein bzw. lassen sich von der entsprechenden Methode des Parent-Objektes dort eintragen.

Sollte man aber nur machen, wenn es semantisch einen Sinn ergibt, wie hier beim Aufbau einer Baumstruktur.

Gruß, Lutz

Hallo!
Du hast es schon richtig geschrieben:
Die Child-Elemente lassen sich eintragen, sie machen es nicht selbst.

Entweder, das Element kann (zumindest zeitweise) auch alleine existieren, dann sollte es einen „normalen“ Konstruktor ohne Angabe eines Parents geben und eine Methode des Parent-Objekts, um das Element diesem Parent hinzuzufügen.

Wenn das Element selbst nie Sinn macht ohne Parent (und man sowohl vom Parent zum Element als auch anders herum navigieren möchte), bekommt das Element nur einen Konstruktor, in dem das Parent mitgegeben wird (welches sich das Element dann als Read-Only speichert) und einen privaten parameterlosen Konstruktor.
Um die Navigation Parent->Element auch gleich in einem Schritt zu bekommen, ist es geschickt, das Element vom Parent selbst über eine Methode erzeugen zu lassen (also z.B. ein AddElement()).

Gruß,
Martin

Hi,

du kannst mit Extension Methods arbeiten:

 public static class TestClassExtenstions
 {
 public static void AddToList(this TestClass item, 
 List list)
 {
 list.Add(item);
 }
 }

Aufruf zum Beispiel wie folgt:

new TestClass
 {
 TestNumber = 3,
 TestDescription = "nichtSchön"
 }.AddToList(\_list);

Wobei „TestNumber“ und „TestDescription“ die Properties des „TestClass“ Beispiel Objektes sind. Einfach durch deine Properties ersetzen.

Eine andere Option, die gewünschte Funktion „klassisch“ in Methoden durchführen:

 private void AddChild(List list, TestClass item)
 {
 list.Add(item);
 }

 private void AddChild(List list, int number, 
 string description)
 {
 list.Add(new TestClass()
 {
 TestNumber = number,
 TestDescription = description
 });
 }

Mit den Aufrufen:

 AddChild(\_list, new TestClass
 {
 TestNumber = 1,
 TestDescription = "test1"
 });
 AddChild(\_list, 2, "test2");

lieGrü
t.