Додавання кімнатної угруповання програми управління освітленням в Visual C # (Sharp)

Наступний код (розташований в класі LightingController) додає комнаую угруповання:

public object AddRoomGrouping(string description) { RoomGrouping grouping = new RoomGrouping {

Description = description Rooms = null

}

_roomGroupingsInsert(grouping) return grouping ,-

}

У процесі додавання нової кімнатної угруповання створюється екземпляр класу RoomGrouping, присвоюються значення членам даних, після чого викликається мод _roomGroupings insert О, щоб додати нову кімнатну угрупування в звязаний список

Подивимося на спосіб присвоювання значень членам даних, який називається ініалізаціей обєкта У попередніх прикладах, для присвоєння значень по умоанію членам даних примірника обєкта ми застосовували конструктор з соответс параметрами Але можна також створити обєкт і визначити блок коду для присвоєння значень відповідним членам даних У разі класу RoomGrouping значення присвоюються двом загальним членам даних – Description і Rooms – таким чином:

Description = description, Rooms = null

До членів даних Description і Rooms дозволений доступ для присвоювання їм лю, що є важливою обставиною, т к даний спосіб не працює з властивостями з доступом тільки для читання Щоб мати можливість присвоювати значення членам даних, при створенні екземпляра за допомогою ключового слова new опускаються круглі дужки Замість них застосовуються фігурні дужки, внуі яких перераховуються розділення комами пари ключ / значення. Ключ являє член даних, якому необхідно присвоїти значення, а значення є даними, які присвоюються члену даних

Ще одним способом, вартим уваги в коді для додавання комнаой угруповання, є визначення дескриптора даних при передачі іормаціі:

return grouping

У реалізації AddRoomGrouping () змінної grouping присвоюється екземпляр класу RoomGrouping В оголошенні класу RoomGrouping його область видимості обмежена складанням LibLightingSystem, в той час як LightingController має область видимості public Якби метод AddRoomGrouping () спробував возвр екземпляр класу RoomGrouping, то компілятор побачив би в цьому помилку унаслідок невідповідності областей видимості Вважаючи на час, що нам, справді, потрібно повернути екземпляр класу RoomGrouping, єдиним способом зробити це було б оголошення даного класу як public Але така зміна області видимості при оголошенні класу RoomGrouping буде неправильним ренієм, т к, за винятком методів базового класу, даний клас не містить оголошених методів і має спільні члени даних Цей клас має конкретне призначення, і його не слід розділяти

Таким чином, потрібно рішення інше, ніж оголошення класу RoomGrouping як public Можна було б додати в оголошення член даних, що грає роль лічильника, і повертати цілочисельне значення, яке вказує екземпляр RoomGrouping в списку, до якого виконується звернення Але для цього Требова б отримати доступ до списку, після чого послідовно обробити кожен елемент списку, поки не буде знайдений необхідний екземпляр RoomGrouping

Рішенням буде оголосити метод, який повертає обєкт типу При використанні обєкта, ми визначаємо метод для повернення примірника обєкта Тип даного екземпляра може бути відомий чи ні, і в разі з методом AddRoomGrouping () тип невідомий Але в цьому немає нічого страшного, т к ми як користувач буде раматрівать даний екземпляр як ключ, керований класом LightingController На технічному жаргоні, даний обєкт є дескриптором, який ми педалі якого іншого компонента, який знає, що з ним робити У даом прикладі, дескриптор передається класу LightingController, т к він знає, що дескриптор є екземпляром класу RoomGrouping

ПРИМІТКА

Дескриптори були дуже популярні в мові С і є покажчиками на область памяті Викликає код не знає, куди вказує покажчик, але використовує його при роботі з інтерфейсом API В даний час застосування дескрипторів пішло на спад, оскільки замість них застосовуються обєкти, узагальнення NET та інші конструі програмування Але, тим не менш, іноді дескриптори бувають дуже пезнимі З їх допомогою можна уникнути відкриття внутрішнього стану вашого інтерфейсу API, не створюючи при цьому ієрархії обєктів для відстеження обреній до обєктів

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*