double arrow

Спецификаторы доступа

Спецификаторы (модификаторы доступа) определяют область видимости данного класса. Возможные значения спецификаторов перечисле­ны в следующей таблице:

Спецификатор Описание
1. private Доступ только из элементов класса, внутри которых описан данный класс.
2. protected Доступ только из данного или производного класса.
3. public Доступ к классу не ограничен
4. internal Доступ только из данной программы (сборки).
5. protected internal Доступ только из данного и производного класса и из данной программы (сборки).
6. abstract Абстрактный класс. Применяется в иерархии объектов.
7. static Статический класс. Позволяет обращатся к методам класса без создания экземпляра класса
8. new Задает новое описание класса взамен унаследованного от предка. Используется для вложения классов (в иерархии объектов).
9. sealed Бесплодный класс. Запрещает наследование данного класса. Применяется в иерархии объектов.

Спецификаторы 1-5 называются спецификаторами доступа. Они определяют, откуда можно непосредственно обращаться к данному классу. Спецификаторы доступа могут комбинироваться с остальными спецификаторами.

Класс можно описывать непосредственно внутри пространства имен или внутри другого класса. В последнем случае класс называется вложен­ным. В зависимости от места описания класса некоторые из этих спецификато­ров могут быть запрещены. В данном случае будем рассмотривать классы, которые описываются непосредственно в пространстве имен. Для таких классов до­пускаются только два спецификатора: public и internal. По умолчанию, то есть если ни один спецификатор доступа не указан, подразумевается специфика­тор internal.

Объекты (или экземпляры) соответствующего класса можно создавать явным или неявным образом, то есть либо программистом, либо системой. Программист создает экземпляр класса с помощью операции new, например:

class Demo{…} // Объявление класса Demo

Demo a = new Demo(); // Создание экземпляра класса Demo

Если объем памяти, достаточный для хранения объекта, выделить не уда­лось, то генерируется исключение OutOfMemoryException.

Для каждого объекта при его создании в памяти выделяется отдельная область, в которой хранятся его данные. В классе могут присутствовать ста­тические элементы, которые существуют в единственном экземпляре для всех объектов класса. Статические данные часто называют данными класса, а осталь­ные — данными экземпляра. Для работы с данными класса используются статические мето­ды класса, для работы с данными экземпляра — методы экземпляра, или просто методы.

По умолчанию применяется модификатор internal.

Состав класса

В общем случае класс может содержать следующие функциональные элементы:

1. Данные: переменные или константы.

2. Методы, реализующие не только вычисления, но и другие действия, выполняемые классом или его экземпляром.

3. Конструкторы (реализуют действия по инициализации экземпляров или клас­са в целом).

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

5. Деструкторы (определяют действия, которые необходимо выполнить до того, как объект будет уничтожен).

6. Индексаторы (обеспечивают возможность доступа к элементам класса по их порядковому номеру).

7. Операции (задают действия с объектами с помощью знаков операций).

8. События (определяют уведомления, которые может генерировать класс).

9. Вложенные типы (типы данных, внутренние по отношению к классу).

Рассмотрим первую категорию элементов класса. Прежде чем приступить к проектированию классов, необходимо поговорить о при­сваивании и сравнении объектов. Механизм выполнения присваивания один и тот же для величин любого типа, как ссылочного, так и размерного, однако результаты различаются. При присваивании значения копируется значение, а при присваивании ссыл­ки — ссылка, поэтому после присваивания одного объекта другому мы получим две ссылки, указывающие на одну и ту же область памяти:

Пусть были созданы три объекта а, b и с, а за­тем выполнено присваивание b = с. Теперь ссылки b и с указывают на один и тот же объект. Старое значение b становится недоступным и очищается сборщиком мусора.

Аналогичная ситуация с операцией проверки на равенство. Величины значимого типа равны, если равны их значения. Величины ссылочного типа равны, если они ссылаются на одни и те же данные. Так, объекты b и с равны, т.к. они ссылаются на одну и ту же область памяти. Но а не равно b даже при равенстве их значений.

Поля класса

Поле представляет собой переменную, связанную с данным классом или его экземпляром. Поля класса синтаксически являются обычными переменными (объектами) и их описание удовлетворяет обычным правилам объявления переменных. Содержательно поля задают представление той самой абстракции данных, которую реализует класс. Поля характеризуют состояние объектов класса. Когда создается новый объект класса (в динамической памяти или в стеке), то этот объект представляет собой набор полей класса. Два объекта одного класса имеют один и тот же набор полей, но отличаются значениями, хранимыми в этих полях. Все объекты класса Person могут иметь поле, характеризующее рост персоны, но один объект может быть высокого роста, другой - низкого, а третий - среднего роста.

Язык C# является языком со строгой типизацией. В соответствии с этим в нем определены 7 видов переменных: статические, значащие, экземплярные, элементы массивов, входные параметры, выходные параметры, локальные переменные.


Сейчас читают про: