Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык C# и основы платформы .NET.docx
Скачиваний:
36
Добавлен:
11.05.2015
Размер:
178.68 Кб
Скачать

8. Классы

Класс является основным пользовательским типом. Синтаксис объявления класса в C# следующий:

модификаторы class имя-класса

{

[элементы-класса]

}

8.1. Допустимые элементы класса

1. Поле.Синтаксис объявления поля класса совпадает с синтаксисом оператора объявления переменной (как правило, идентификаторы полей снабжаются неким оговорённым префиксом). Тип поля всегда должен быть указан явно, использованиеvarне допускается. Если для поля не указано начальное значение, то поле принимает значение по умолчанию для соответствующего типа (для числовых типов –0, для типаbool–false, для ссылочных типов –null). Для полей можно применять модификаторreadonly, который запрещает изменение поля после его начальной установки.

classPerson

{

readonlyint_age = 20;

string _name = "None";

}

Поля с модификатором readonlyпохожи на константы, но имеют следующие отличия: тип поля может быть любым; значение поля можно установить при объявлении или в конструкторе класса; значение поля вычисляется в момент выполнения, а не при компиляции.

2. Константа.Синтаксис объявления константы в классе аналогичен синтаксису, применяемому при объявлении константы в теле метода.

Следующие элементы класса будут подробно рассмотрены в дальнейшем.

3. Метод.Методы описывают функциональность класса.

4. Свойство.Свойства класса предоставляют защищённый доступ к полям.

5. Индексатор.Индексатор – это свойство-коллекция, отдельный элемент которого доступен по индексу.

6. Конструктор.Задача конструктора – начальная инициализация объекта (экземплярный конструктор) или класса (статический конструктор).

7. Финализатор.Финализатор автоматически вызывается сборщиком мусора и содержит завершающий код для объекта.

8. Событие.События представляют собой механизм рассылки уведомлений различным объектам.

9. Операция.Язык C# допускает перегрузку некоторых операций для объектов класса.

10. Вложенный пользовательский тип.Описание класса1может содержать описание другого пользовательского типа – класса, структуры, перечисления, интерфейса, делегата. Обычно вложенные типы выполняют вспомогательные функции и явно вне основного типа не используются.

8.2. Модификаторы доступа для элементов и типов

Для поддержания принципа инкапсуляции элементы класса могут снабжаться специальными модификаторами доступа:

– private. Элемент с этим модификатором доступен только в том типе, в котором определён. Например, поле доступно только в содержащем его классе.

– protected. Элемент виден в типе, в котором определён, и в наследниках этого типа (даже если наследники расположены в других сборках). Данный модификатор может применяться только в типах, поддерживающих наследование, то есть в классах.

– internal. Элемент доступен без ограничений, но только в той сборке, где описан.

– protected internal. Элемент виден в содержащей его сборке без ограничений, а вне сборки – только в наследниках типа (т.е. это комбинацияprotectedилиinternal2).

– public. Элемент доступен без ограничений как в той сборке, где описан, так и в других сборках, к которым подключается сборка с элементом.

По умолчанию (без указания) для всех элементов типа применяется модификатор private. Для локальных переменных методов и операторных блоков модификаторы доступа не используются.

При описании самостоятельного класса допустимо указать для него модификаторы publicилиinternal(internalприменяется по умолчанию). Если же класс вложен в другой пользовательский тип, то такой класс можно объявить с любым модификатором доступа3. Заметим, что уinternal-классаpublic-элементы за пределами сборки не видны.