Приватні класи та ініціалізація об’єктів в Visual C # (Sharp)

У цьому розділі ми розглянули, як використовувати інтерфейси, реалізації та компенти в додатках на основі ядра Це великою мірою той тип програмування, з яким ви будете стикатися в міру користування мовою С # У цьому розділі надається додаткова інформація про використання приватних класів і про ініціалізацію обєктів вкладеними типами даних

Класи RoomGrouping І Room визначені У проекті LibLightingController, і ЇХ область видимості обмежена даної бібліотекою Це тому, що ці класи н> окни тільки класу LightingController для підтримки його функціональності Кожен з цих класів оголошений всередині збірки, що є позитивним аектом, але, тим не менш, розробники можуть використовувати класи в збірці ядра для своїх цілей Іноді це бажана можливість, а іноді – ні

У випадку з класом LightingController іншим підходом може бути оголошення цих класів в його контексті, як показано в наступному коді:

public class LightingController { private class RoomGrouping { } private class Room { }

}

Тут класи RoomGrouping І Room оголошені усередині класу LightingController, що робить їх приватними для даного класу Це означає, що тільки клас LightingController може створювати екземпляри і використовувати ці класи, і повністю виключаються ситуації, коли інший клас може створити їх екземпляри

У випадку з класом LightingController було б переважніше оголосити клаи RoomGrouping І Room таким чином

Приватні класи також використовуються в контексті фабрики Уявіть, наприклад, ситуацію, коли ви хочете, щоб ніхто, крім фабрики, не міг створювати екземяр кімнати Оголошення iRoom і фабрики може виглядати таким чином:

public static class Factory { private class MyRoom : IRoom { }

public static IRoom CreateMyRoom() { return new MyRoom()

}

}

У даній реалізації MyRoom ми можемо бути впевнені в тому, що тільки Factory може коли-небудь створювати екземпляри MyRoom Також ми можемо бути впевнені в тому, що MyRoom можна маніпулювати тільки за допомогою інтерфейсу iRoom Занадто часто розробники лінуються і створюють екземпляри типів, що містяться в збірці, і використовують тип реалізації, коли інтерфейс не має методів або властивостей, які їм потрібні

У цьому розділі ми розглянули привласнення значень членам даних ініціалізацією обєкта замість застосування конструктора Ініціалізація обєктів також Работте для вкладених типів даних Розглянемо ситуацію, коли один тип посилається на інший тип Ініціалізувавши обєкти, можна створити екземпляри обєктів і присвоїти їм значення на декількох рівнях

Припустимо, у нас є наступний вихідний код:

class МуТуре {

int _dataMember

public МуТуре () {} public int DataMember {

get {

return _dataMember

}

set {

_dataMember = value

}

}

}

class EmbeddedMyType {

MyType „embedded

public EmbeddedMyType() {

}

public MyType MyType { get {

return „embedded

}

set {

„embedded = value

}

}

}

Тип EmbeddedMyType має властивість, яке посилається на тип MyType При створю примірника EmbeddedMyType ми б, швидше за все, також хотіли б створити властивість мутуре і привласнити йому значення Це можна зробити ініціалізацією обєкта таким чином:

EmbeddedMyType els = new EmbeddedMyType

{

MyType = new MyType

{

DataMember =1 0

}

}

У цьому розділі ми розглянули створення ядра додатки, використовуючи для цього іексатори і ключове слово yield Рекомендується запамятати такі ОСНО аспекти розглянутого матеріалу

П Додаток на основі ядра є прикладом компонентно-орієнтованої архітектури, коли розробник не контролює певні реалізації Застосування компонентів дозволяє розбити процес розробки на модулі з тим, щоб окремі завдання виконувалися окремими командами

П Інтерфейси – це контракти між модулями, і ми тестуємо інтерфейси, а не реалізації

• Для спрощення групування обєктів застосовуються інтерфейси-заповнювачі

• Індексатори і ключове слово yield є конструкційних елементів, які спрощують і прискорюють виконання завдання створення робочого коду

• За допомогою індексаторів типу можна додати властивості масиву

П Ключове слово yield застосовується спільно з ключовим словом foreach для обробки в циклі типів, які, можливо, не підтримують колекції Наприклад, таким чином можна обробляти елементи математичної пледовательності

Джерело: Гросс К С # 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>

*

*