Delegates? Ich glaub du weißt nicht was das sind. Bitte verwende die korrekten Bezeichnungen. Das ist wichtig, damit wir wissen was du meinst. Außerdem hab ich dir im letzten Posten die Vorgehensweise mit Properties gezeigt - schade dass du dies ignorierst und unnötige und hässliche Setter Methode einbaust.
Zur Problembeschreibung sagst du sehr wenig. Ich kann mir nicht vorstellen, was passiert, wenn Knopf 1 bzw. Schrank1 Offen ist. Ist das Becken dann von jetzt auf nachher leer? Den Zulauf hast du gar nicht beschrieben und wieso müssen es vier Klassen sein?
Die OOP versucht reale Dinge in Klassen abzubilden. Deshalb mach das einfache:
Das Becken besteht aus einem Volumen, Zu- und Abläufe. (Ganz konkret wahrscheinlich noch mehr Dinge wie Inhalt, Farbe, Form, Gewicht... aber das ist soweit mal uninteressant weil auf der Skizze ja auch nicht erkennbar. Dementsprechend ergibt sich folgende Klasse Becken:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| class Becken { public float Volumen { get; private set; }
public float Inhalt { get; private set; }
public List<Kanal> Zulaeufe { get; set; }
public List<Kanal> Ablaeufe { get; set; }
public Becken(float volumen) { Volumen = volumen; }
private void UpdateInhalt() { VerarbeiteKanal(false, Ablaufe);
VerarbeiteKanal(true, Zulaufe); }
private void VerarbeiteKanaele(bool isZulauf, List<Kanal> kanaele) { foreach(var kanal in kanaele) { if (kanal .Offen) { Inhalt += isZulauf ? kanal .Durchflussmenge : -kanal .Durchflussmenge; } } } } |
Damit wäre das Becken beschrieben ...
Ein Kanal läßt sich daraus auch schon bleiten:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| public class Kanal { public bool Offen { get; set; } public float Durchflussmenge { get; set; } } |
In Kombination Kann das dann so aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Becken becken = new Becken(100f);
becken.Ablaufe.Add(new Kanal{ Durchflussmenge = 5f; }); becken.Ablaufe.Add(new Kanal{ Durchflussmenge = 2f; });
becken.Zulaeufe.Add(new Kanal{ Durchflussmenge = 3f; });
becken.Ablaeufe[0].Offen = becken.Ablaeufe[0].Offen; |
Soviel mal zur Inspiration.
Gruß