Ich bin mir nicht sicher, ob ich dich richtig verstanden hab und ob deine Idee umsetzbar ist.
Angenommen du hast eine Lampe
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| public class Lampe { public bool Leuchtet { private set; get; }
public void Schalte() { Leuchtet = !Leuchtet; } } |
Die verändert ihren Zustand (leuchtet an/aus) über die Funktion Schalte.
Wenn du nun einen Schalter hast, dem du Lampen hinzufügen kannst:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public class Schalter { public Lampe { get; set; }
public void Schalte() { if (Lampe != null) { Lampe.Schalte(); } } } |
So könntest du es machen. Wobei ich dann nicht kapiere warum es die Schalte Klasse gibt.
Ich denke es wäre sinnvoller, wenn du einer Lampe Schlater hinzufügen kannst und wenn ein Schalter gedrückt wird die Lampe toggelt.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| public class Lampe { public bool Leuchtet { private set; get; }
private List<Schalter> _schalter = new List<Schalter>(); private void AddSchalter(Schalter schalter) { schalter.Clicked += new Eventhandler(schalter_clicked); _schalter.Add(schalter); }
private void Eventhandler(object sender, Eventargs e) { this.Schalte(); }
public void Schalte() { Leuchtet = !Leuchtet; } } |
Code ist (vermutlich) nicht ganz korrekt.. aber ich hoffe du verstehst was ich meine.
Sehe gerade Jürgens Beitrag und ergänze deshalb, das mein Beispiel sich auf eine Lampe mit mehreren Schaltern bezieht.. zum Beispiel in einem Flur bei dem sich am Ende und Anfang jedesmal Schalter befinden. Mit dem Ansatz wären allerdings beide Fälle abgedeckt (ein Schalter kann mehrere Lampen steuern und mehrere Schalter können ein Lampe steuern --> Observer-Pattern). Noch schöner ist Jürgens Erweiterung, damit man mit einem Schalter auch andere Gegenstände bedienen kann. Dann müsstest du ein Interface einführen ...
So weit so gut,
Gruß