- •1.1Классы и ооп
- •1.2Синтаксис класса
- •1.2.1Состав классов
- •1.2.2Модификаторы доступа
- •1.3Метод Main
- •1.3.1Аргументы командной строки
- •1.4Инициализация классов и конструкторы
- •1.5Деструкторы класса
- •1.6Статические члены класса
- •1.6.1Неизменяемые поля
- •1.7Вложенные классы
- •1.8Наследование
- •1.9Классы и структуры
- •1.9.1Структуры
- •1.9.2Синтаксис структур
- •1.10Перечисления
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");
}