Главная » C# » Выполнение операций с группой приложения управления освещением в Visual C# (Sharp)

0

С определенной группировкой можно выполнять глобальные операции, воздейсующие на все комнаты в группировке. Одним из примеров таких операций может быть выключение освещения во всех комнатах группировки, основанной на экзеляре интерфейса iRoom. Соответствующий код может выглядеть таким образом:

public void TurnOffLights(object grouping) { foreach (IRoom room in Roomlterator(grouping)) {

IRemotecontrolRoom remote = room as IRemotecontrolRoom;

ISensorRoom sensorRoom = room as ISensorRoom; if (sensorRoom != null) {

if (!sensorRoom.IsPersonlnRoom) { continue;

}

}

else if (remote != null) { remote.LightSwitch(false);

}

}

Обратите внимание на то, что дескриптор не преобразуется в экземпляр RoomGrouping. Дескриптор передается методу Roomlterator о, который подобно методу RoomGroupingiterator использует ключевое слово yield, чтобы позволить методу TurnoffLights() использовать оператор foreach для обработки в цикле отдельных комнат.

ПРИМЕЧАНИЕ

Комбинация конструкции yiel d return и  ключевого  слова  foreach является  моым и легки м способо м дл я  последовательной обработки коллекции данных. Достнством конструкции yiel d return является то, что обрабатываемы е данны е не обязательно   должн ы   быть   в   цикле   или   коллекции.   Они   могут  быть   сгенерированы с  помощь ю  алгоритма  или  иметь  фиксированное  число  элементов.

Для каждой итерации цикла foreach комната экземпляра IRoom приводится к типам iRemoteControlRoom и isensorRoom. Приведение к этим двум типам необходимо потому, что, в зависимости от типа комнаты, нужно выполнять разные алгоритмы. Например, ДЛЯ комнат типа ISensorRoom СО значением свойства IsPersonlnRoom, равным true, освещение надо оставить включенным. Если освещение нужно оавить в его текущем состоянии, то необходимо выполнить следующую итерацию с помощью ключевого слова continue.

Если обработка продолжается, выполняется проверка, может ли освещение данной комнаты управляться удаленно, что подразумевает реализацию интерфейса IRemoteControlRoom. Если значение переменной remote не равно null, то вызывтся метод Lightswitch (), которому передается параметр false, чтобы выключить освещение. Таким образом, в цикле обрабатываются все комнаты группировки.

На этом разработка ядра завершена, но прежде чем приступить к рассмотрению его применения в приложении управления освещением, я бы хотел обсудить альтернивный подход к реализации ядра.

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии