Главная » C# » Частные классы и инициализация объектов в Visual C# (Sharp)

0

В этой главе мы рассмотрели, как использовать интерфейсы, реализации и компенты в приложениях на основе ядра. Это в большой мере тот тип программировия, с которым вы будете сталкиваться по мере пользования языком С#. В этом разделе предоставляется дополнительная информация об использовании частных классов и об инициализации объектов вложенными типами данных.

Частные классы

Классы 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 е.:  ил. — (Самоучитель)

По теме:

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