Необязательные атрибуты задают дополнительную информацию о классе. Поскольку наша задача пока состоит в том, чтобы освоить основные понятия, мы отложим знакомство с атрибутами до главы 12.
№ Спецификатор Описание
1 new Используется для вложенных классов. Задает новое описание
класса взамен унаследованного от предка. Применяется в ерархиях
объектов, рассматривается в главе 8 (см. с. 175)
2 public Доступ не ограничен
3 protected Используется для вложенных классов. Доступ только из элементов
данного и производных классов
4 internal Доступ только из данной программы (сборки)1
5 protected internal Доступ только из данного и производных классов или из данной
программы (сборки)
6 private Используется для вложенных классов. Доступ только из элементов
класса, внутри которого описан данный класс
7 abstract Абстрактный класс. Применяется в иерархиях объектов,
рассматривается в главе 8 (см. с. 181)
8 sealed Бесплодный класс. Применяется в иерархиях объектов,
рассматривается в главе 8 (см. с. 182)
9 static Статический класс. Введен в версию языка 2.0. Рассматривается в
|
|
разделе «Конструкторы» (см. с. 114)
Спецификаторы 2-6 называются спецификаторами доступа. Они определяют, откуда можно непосредственно обращаться к данному классу. Спецификаторы доступа могут присутствовать в описании только в вариантах, приведенных в таблице, а также могут комбинироваться с остальными спецификаторами.
В этой главе мы будем изучать классы, которые описываются в пространстве имен непосредственно (то есть не вложенные классы). Для таких классов допускаются только два спецификатора: public и internal. По умолчанию, то есть если ни один спецификатор доступа не указан, подразумевается спецификатор internal.
Класс является обобщенным понятием, определяющим характеристики и поведение некоторого множества конкретных объектов этого класса, называемых экземплярами, или объектами, класса.
Объекты создаются явным или неявным образом, то есть либо программистом, либо системой. Программист создает экземпляр класса с помощью операции new, например:
Demo a = new Demo(); // создание экземпляра класса Demo
Demo b = new Demo(); // создание другого экземпляра класса Demo
ПРИМЕЧАНИЕ
Как вы помните, класс относится к ссылочным типам данных, память под которые выделяется в хипе (см. раздел «Типы-значения и ссылочные типы» на с. 35). Таким образом, переменные xи y хранят не сами объекты, а ссылки на объекты, то есть их адреса. Если достаточный для хранения объекта объем памяти выделить не удалось, операция new генерирует исключение OutOfMemoryException. Рекомендуется предусматривать обработку этого исключения в программах, работающих с объектами большого объема.
|
|
Для каждого объекта при его создании в памяти выделяется отдельная область, в которой хранятся его данные. Кроме того, в классе могут присутствовать статические элементы, которые существуют в единственном экземпляре для всех объектов класса. Часто статические данные называют данными класса, а остальные — данными экземпляра.
Функциональные элементы класса не тиражируются, то есть всегда хранятся в единственном экземпляре. Для работы с данными класса используются методы класса {статические методы), для работы с данными экземпляра — методы экземпляра, или просто методы.
До сих пор мы использовали в программах только один вид функциональных элементов класса — методы. Поля и методы являются основными элементами класса. Кроме того, в классе можно задавать целую гамму других элементов: свойства, события, индексаторы, операции, конструкторы, деструкторы, а также типы (рис. 5.1). Ниже приведено краткое описание всех элементов класса (см. также рис. 5.1):
□ Константы класса хранят неизменяемые значения, связанные с классом.
□ Поля содержат данные класса.
□ Методы реализуют вычисления или другие действия, выполняемые классом
или экземпляром.
□ Свойства определяют характеристики класса в совокупности со способами их
задания и получения, то есть методами записи и чтения.
□ Конструкторы реализуют действия по инициализации экземпляров или клас
са в целом.
□ Деструкторы определяют действия, которые необходимо выполнить до того,
как объект будет уничтожен.
□ Индексаторы обеспечивают возможность доступа к элементам класса по их
порядковому номеру.
□ Операции задают действия с объектами с помощью знаков операций.
□ События определяют уведомления, которые может генерировать класс.
□ Типы — это типы данных, внутренние по отношению к классу.
Первые пять видов элементов класса мы рассмотрим в этой главе, а остальные — в последующих. Но прежде чем начать изучение, необходимо поговорить о присваивании и сравнении объектов.