Вот пример:
public delegate void HandleSwitchStateChanged(ISwitch source, bool switchedOn);
public interface ISwitch
{
event HandleSwitchStateChanged SwitchStateChanged;
bool SwitchedOn { get; }
}
public enum SwitchesState
{
AllOn,
AllOff,
Mixed
}
public class MonitorsMultipleSwitches
{
private readonly ISwitch[] _switches;
private SwitchesState _switchesState;
public MonitorsMultipleSwitches(ISwitch[] switches)
{
_switches = switches;
foreach (var item in switches)
{
item.SwitchStateChanged += HandleSwitchStateChanged;
}
}
public void HandleSwitchStateChanged(ISwitch source, bool switchedOn)
{
SwitchesState newState;
if (_switches.All(s => s.SwitchedOn))
newState = SwitchesState.AllOn;
else if (_switches.All(s => !s.SwitchedOn))
newState = SwitchesState.AllOff;
else
newState = SwitchesState.Mixed;
if (newState == _switchesState) return; // no meaningful change
_switchesState = newState;
// do something.
}
}
В этом примере один класс контролирует несколько коммутаторов. Если состояние любого из них изменяется, он проверяет, все ли включены, все выключены, или некоторые включены, а некоторые выключены. Затем, если он отличается от состояния, в котором он находился ранее, он может реагировать при необходимости.
(Возможно, AllOff
- это не то состояние, о котором вы заботитесь - либо они все включены, либо вам все равно.)