Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОСТАВ КЛАССОВ.doc
Скачиваний:
1
Добавлен:
11.09.2019
Размер:
59.9 Кб
Скачать

1.4Инициализация классов и конструкторы

Для инициализации экземпляра класса применяются специальные методы - конструкторы. Для инициализации полей, которые имеют тип static в C# имеется новый тип конструкторов— статический (static constructors.

Когда пользователь создает экземпляр объекта, вызывается его конструктор, который должен вернуть управление до того, как пользователь сможет выполнить над объектом другое действие.

Конструктор класса в С# должен иметь имя такое же как и у класса:

using System ;

using System ;

class Constructor_Test

{

ConscrucrorlApp()

{

Console.WriteLine("конструктор.") ;

}

public static void Main(]

{

Constructor_Test a = new Construotor_Test();

}

}

Значений конструкторы не возвращают, а вызов осуществляется при помощи ключевого слова new:

<класс> <объект> = new <класс>(аргументы конструктора)

1.5Деструкторы класса

Если задача создания объектов полностью возлагается на программиста, то задача удаления объектов, после того, как они стали не нужными, в Visual Studio .Net снята с программиста и возложена на соответствующий инструментарий - сборщик мусора. В классическом варианте языка C++ деструктор так же необходим классу, как и конструктор. В языке C# y класса может быть деструктор, но он не занимается удалением объектов и не вызывается нормальным образом в ходе выполнения программы.

Так же, как и статический конструктор, деструктор класса, если он есть, вызывается автоматически в процессе сборки мусора. Его роль - в освобождении ресурсов, например, файлов, открытых объектом.

Деструктор C# фактически является финализатором (finalizer).

Например : деструктор класса Person:

~Person()

{

//Код деструктора

}

Имя деструктора строится из имени класса с предшествующим ему символом ~ (тильда). Как и у статического конструктора, у деструктора не указывается модификатор доступа.

1.6Статические члены класса

Элемент класса можно объявить как статический (static member) или как элемент класса (instance member). По умолчанию каждый член определен как член экземпляра. Это значит, что для каждого экземпляра класса делается своя копия этого члена. Когда член объявлен как статический, имеется лишь одна его копия. Статический член создается при загрузке содержащего класс приложения и существует в течение жизни приложения.

1.6.1Неизменяемые поля

Поле, определенное как const, ясно указывает, что программист намерен поместить в него постоянное значение.

Определяя поле с помощью ключевого слова readonly, можно установить значение поля лишь в одном месте — в конструкторе. После этого поле не могут изменить ни сам класс, ни его клиенты.

1.7Вложенные классы

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

1.8Наследование

Чтобы построить (в терминах данных или поведения) класс на основе другого класса, применяется наследование. Оно принадлежит к правилам заменяемости, а именно к тому, которое гласит, что производный класс может быть заменен базовым. Примером этого может служить написание иерархии классов базы данных.

Чтобы унаследовать один класс от другого, используется синтаксис:

class <производный_класс>: <базовый_класс>

Во всех конструкторах С#, кроме System.Object, конструкторы базового класса вызываются прямо перед исполнением первой строки конструктора. Эти инициализаторы конструкторов позволяют задавать класс и подлежащий вызову конструктор. Они бывают двух видов.

Инициализатор в виде base(...) активизирует конструктор базового класса текущего класса.

Инициализатор в виде this(...) позволяет текущему базовому классу вызвать другой конструктор, определенный в нем самом. Это полезно, когда перегружены несколько конструкторов и требуется чтобы всегда будет вызван конструктор по умолчанию.

Пример:

using System ;

class A

{

public А()

{

Console.WriteLine("A");

};

class В: А

public B(): base ()

{

Console.WriteLine("B");

}