- •Обзор элементов класса.
- •Класс Object
- •Структуры
- •Методы Ссылочные параметры ref и out
- •Переменное число аргументов метода
- •Перегрузка методов. Вызов методов с одинаковым именем и разными аргументами
- •Конструкторы экземпляра
- •Вызов конструктора экземпляра
- •Закрытые конструкторы экземпляра
- •Статические конструкторы
- •Конструкторы структур
- •Член со спецификатором readonly
- •Деструкторы. Сборка мусора
- •Объект Account
- •Объект Account недоступен
- •Свойства
- •Индексаторы
- •Предпосылки появления наследования
- •Синтаксис наследования.
- •Типы наследования
- •Множественное наследование
- •Наследование интерфейса
- •Виртуальные методы
- •Спецификаторы доступности
- •Вызов базовых версий функций
- •Абстрактные классы и функции
- •Структуры и наследование
- •Полиморфизм
- •Потеря и восстановление информации о типе
- •Операции is и as
- •Файловый ввод-вывод
- •Потоки данных и файловый ввод-вывод
- •Виды файлов
- •Классы файлового ввода-вывода
- •Класс FileInfo
- •Текстовый ввод-вывод при помощи Stream Reader и Stream Writer
- •Бинарный ввод и вывод при помощи класса FileStream
Конструкторы экземпляра
Конструктор экземпляра класса представляет собой специальный метод, запускаемый по ключевому слову new. Он используется для инициализации переменных и других операций при создании объекта.
Определение конструктора экземпляра представлено в следующем синтаксическом блоке
Определение_конструктора_экэемпляра::=
[<Спецификатор_конструктора>] <Идентификатор__конструктора> ([<Список_формальных_параматров> ] )
[<Инициализатор_конструктора> ]
<Тело_конструктора>
где:
<Спецификатор_конструктора>
::= private
;:= public
::= protected
::= internal
<Инициализатор_конструктора>
::= : base ( [<Список_аргументов>] )
::= : this ( [<Список_аргументов>] )
{
<Операторы>
}
Стоит отметить, что Идентификатор_конструктора должен быть таким же, как идентификатор его класса. Скажем, конструктор класса Car также должен называться Car. Конструктор экземпляра не возвращает значения, поэтому тип возвращаемого значения не указывается (не используется даже ключевое слово void). <Инициализатор_конструктора> вызывает исполнение другого конструктора экземпляра до того как исполнить операторы исходного.
Чтобы включить конструктор в класс, необходимо разместить его внутри блока определения класса вместе с другими элементами.
С конструктором экземпляра может применяться необязательный спецификатор доступности private или public. Он управляет доступностью конструктора так же, как переменных и методов экземпляра, однако имеются и различия
Аналогично тому как в заголовке обычного метода, в объявлении конструктора экземпляра используются круглые скобки, включающие список формальных параметров. Значения аргументов передаются этим параметрам во время создания объекта с помощью ключевого слова new.
Подобно своим методам, конструктор экземпляра может быть перегружен путем объявления нескольких конструкторов одного класса с разными списками формальных параметров.
Если класс содержит несколько конструкторов экземпляра (которые, таким образом, являются перегруженными), можно дополнительно указать конструктор того же класса, который будет исполняться перед операторами объявленного конструктора. Для этого после списка формальных параметров размешается инициализатор конструктора: this ( [<Список_аргументов>] ). Среда исполнения запускает тот конструктор экземпляра класса, список формальных параметров которого совпадает со списком аргументов инициализатора.
Конструктор экземпляра содержит тело, подобное телу метода. Это означает, что оно может состоять из пустого оператора (точка с запятой) или группы операторов, заключенных в пару фигурных скобок. При вызове конструктора операторы исполняются в той же последовательности, как и при вызове метода. Однако они должны содержать только команды, непосредственно связанные с инициализацией и созданием объекта.
Вызов конструктора экземпляра
Синтаксис языка С# при создании объекта с ключевым словом new требует использовать скобки после имени класса, например:
Car myCar = new Car();
Оператор new Car() создает новый объект класса Car и возвращает ссылку на него, которая затем присваивается переменной myCar. Однако есть у этого оператора и другое назначение: он запускает конструктор экземпляра подобно тому, как осуществляется вызов обычного метода. Скобки после имени класса (в данном случае Car) могут включать список аргументов так же как в вызове метода. Он должен соответствовать списку формальных параметров конструктора. При наличии нескольких конструкторов экземпляра будет исполняться тот, чей список формальных параметров совпадает со списком аргументов.
Конструктор экземпляра с пустым списком формальных параметров называется конструктором экземпляра по умолчанию или конструктором экземпляра без аргументов.