Hi zusammen,
ich habe in meinem Programm eine ICollection mit vielen Instanzen einer
selbst erstellten Klasse, die ich jetzt einfach mal "Objekt" nenne. Die
Objekte sollen allerdings die ICollection kennen; mit den anderen
Objekten kommunizieren, neue Instanzen erstellen, oder sich selbst
daraus löschen können. (Ich iteriere von Zeit zu Zeit durch die
ICollection und rufe Funktionen auf in denen dies geschehen soll.) Dazu
kommen noch einige andere Klassen, die ich im Hauptprogramm
initialisiere, auf die die Objekte ebenfalls Zugriff haben sollen.
Wie teile ich nun den Objekten die ICollection und andere Klassen mit,
und ist das überhaupt so sinnvoll?
Ich hatte überlegt einfach als Variable in die privaten Daten der Klasse
eine ICollection<Objekt> und die anderen Klassen zu erstellen, denen ich
bei der Initialisierung die eigentlichen Instanzen zuweise, jedoch finde
ich dies sehr contra-intuitiv:
1 | void main()
|
2 | {
|
3 | ...
|
4 | Klasse1 klasse1 = new Klasse1();
|
5 | Klasse2 klasse2 = new Klasse2();
|
6 | private ICollection<Objekt> objektCollection;
|
7 | Objekt objekt1 = new Objekt(objektCollection, klasse1, klasse2,...);
|
8 | ...
|
9 | }
|
10 |
|
11 | class Objekt
|
12 | {
|
13 | private ICollection<Objekt> objektCollection;
|
14 | private Klasse1 klasse1;
|
15 | private Klasse2 klasse2;
|
16 | ...
|
17 |
|
18 | void Objekt(ICollection<Objekt> objektCollection, Klasse1 klasse1, ...)
|
19 | {
|
20 | this.objektCollection = objektCollection;
|
21 | objektCollection.Add(this);
|
22 | this.klasse1 = klasse1;
|
23 | ...
|
24 | }
|
25 |
|
26 | public void Foo()
|
27 | {
|
28 | // hier soll jetzt mit objektCollection, Klasse1, ... gearbeitet werden
|
29 | ...
|
30 | Objekt objekt = new Objekt();
|
31 | objektCollection.add(objekt);
|
32 | ...
|
33 | }
|
34 |
|
35 | public void Bar()
|
36 | {
|
37 | // hier soll jetzt mit objektCollection, Klasse1, ... gearbeitet werden
|
38 | }
|
39 |
|
40 | public void Remove()
|
41 | {
|
42 | objektCollection.Remove(this);
|
43 | }
|
44 | ...
|
45 | }
|
Intuitiver hätte ich die Idee gefunden bei jedem Funktionsaufruf (im
Beispiel oben von Foo, Bar und noch ein paar weiteren Funkeionen) die
ICollection&Co mitzugeben, allerdings werden die Zeilen dann relativ
lang und unübersichtlich.
Wie würdet ihr das machen?
Schöne Grüße,
Max