Instanzierung einer statischen Liste ?!

Moin,

habe für ein Projekt mit statischen Variablen und Methoden gearbeitet. Nun soll zur Laufzeit des Programms allerdings ein Klon meiner Liste erstellt werden, um diesen Klon unabhängig von der Originalliste mutieren lassen zu können.

Gibt es dazu noch eine Möglichkeit oder muss ich tatsächlich das ganze Programm umschreiben, sodass die Variablen/Methoden nicht mehr als static deklariert sind?

Grüße

was hat static damit zu tun ???
bzw wo ist den dein Problem ?

Hallo!

Ja, musst Du.
Falsche Designentscheidung am Anfang führt zu erhöhtem Aufwand später.

Aber nur das „static“ rauszumachen ist doch eine Sache von 1* Suchen/Ersetzen, insofern kommst Du glimpflich weg.

Gruß,
Martin

Danke schonmal für die Hilfestellung was mein Problem mit der Deklaration globaler Variablen anbelangte.

Habe den Code nun umgemodelt und stehe vor einem weiteren Problem:
Ich erzeuge per Konstruktor eine Instanz meiner Klasse. Jedes so erstellte Objekt besitzt eine Größe , sowie eine Liste von Items (List<T>()) & eine weitere Liste mit Objekten (container), die wiederum selbst eine Liste beinhalten.

Nun muss die Instanz geklont werden, jedoch bin ich dabei nicht sonderlich erfolgreich. Nach meinem Kenntnisstand liegt das Problem darin, dass Listen Referenztypen sind & somit nur die Referenz geklont wird, nicht aber das referenzierte Objekt. Ich habe nun schon einiges über flaches & tiefes Kopieren gelesen, aber so recht damit umzugehen weiß ich noch nicht.

Liegt es denn überhaupt an den Referenzen & wenn ja, welche (unter dem Aspekt der Laufzeitoptimalität betrachteten) Möglichkeiten habe ich die Listen zu kopieren?

Meine Clone()-Methode sieht derzeit so aus:

public Object Clone()
{
            Klasse_xy clone = new Klasse_xy(new List<double>(items), groesse);
            clone.container = this.container;
            return clone;
}

Der entsprechende Konstruktor dazu sieht so aus:

public Klasse_xy(List initItems, double initGroesse)
{
items = initItems;
container = new List();
groesse = initGroesse;
}

Im Augenblick machst du keinen Clone, sondern referenzierst im (möchtegern) Clone auf die selbe Liste von Elementen (List ist ein Reference Type, die Elemente der List sind Value Types). Da es sich beim Listeninhalt also um Value Type items handelt, sollte ein Anpassen des Konstrukturs (Parameter 1) auf double[] initItems und die Übergabe mittels items.ToArray() sowie die Zuweisung im Konstruktor: items = initItems.ToList() reichen.

Für Reference Types in der Liste müsste das Ganze aber ganz anders aufgebaut werden. Sofern es bei Value Types bleibt, läuft es so, aber schön ist anders.

Gruß
tastatürchen

Danke für den letzten Ansatz, habe das Problem mit einigen Anpassungen mittlerweile beheben können. Für das Klonen ist die Arbeit mit Referenz-Typen aber wirklich mühsam.

Hallo ,

Für das Klonen ist
die Arbeit mit Referenz-Typen aber wirklich mühsam.

sagen wir so , das clonen tut was es soll ,
es ist aber nicht für eigene Objekte gedacht und auch
nicht für mischtypen .
Ansonsten tut es was es soll und hilft ungemein.
Wenn Du noch Serializierung benutzen würdest, wäre da auch im nu gemacht.