Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование C_Sharp.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.5 Mб
Скачать

Объявление объектов класса. Оператор new

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

<имя_класса> <имя_переменной> = new <конструктор_класса>

Оператор new динамически выделяет память для объекта и возвращает ссылку на эту область памяти. Таким образом переменная, определенная в данной конструкции не является объектом, она лишь ссылается на объект, который был физически создан в памяти компьютера оператором new. Следовательно, всем объектам в С# память должна выделяться динамически.

В качестве примера объявим объект класса Vehicle:

Vehicle myCar = new Vehicle();

Поскольку доступ к объектам класса осуществляется с помощью ссылки, классы иначе называют ссылочными типами.

Инциализация членов класса

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

<имя_объекта>.<член_объекта>

В качестве примера приведем объявление и инициализацию объекта класса Vehicle, который был представлен ранее:

using System;

class Vehicle

{

private int passengers; //количество мест для пассажиров

private string mark; //марка

private string model; //модель

private int fuelcap; //объем двигателя

//метод для установки значений для закрытых членов класса

public void setVehicle(int pass, int Mark, int Model, int fuelCap)

{

passengers = pass;

mark = Mark;

model = Model;

fuelcap = fuelCap;

}

public int Passengers

{

get {return passengers;}

set {passengers = value;}

}

public string Mark

{

get {return mark;}

set {mark = value;}

}

public int Model

{

get {return model;}

set {model = value;}

}

public string Fuelcap

{

get {return fuelcap;}

set {fuelcap = value;}

}

}

class vehicleDemo {

public static void main()

{

Vehicle vehicle1 = new Vehicle();

Vehicle vehicle2 = new Vehicle();

vehicle1.setVehicle(4,”Lada”,”Kalina”,2);

vehicle2.Passengers = 4;

int passengersCount = vehicle1. Passengers;

Console.WriteLine(passengersCount);

}

}

Конструкторы и деструкторы

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

Конструктор имеет следуюий вид:

<имя_класса>()

{

//тело конструктора

}

Все классы имеют конструктор независимо от того определен он или нет. В С# по умолчанию предусмотрен конструктор, который присваивает нулевые значения всем переменным экземпляра (для переменных обычного типа) и null (для переменных ссылочного типа). Но если конструктор явно объявлен в классе, то конструктор по умолчанию использоваться не будет.

Пример:

using System;

class NewClass

{

public int a;

public NewClass()

{

a = 100;

}

}

class ConstrDemo

{

public static void Main()

{

NewClass c1 = new NewClass();

Console.WriteLine(c1.a);

}

}

Функции обратные функциям конструктора выполняют деструкторы. Они предназнычены для освобождения памяти от объектов класса. Однако в С# имеется более эффективный механизм для этого, он называется «сборкой мусора». Когда в С#-программе отсутствует обращение к объекту, то он рассматривается как не использующийся более, и система автоматически без участия программиста, освобождает занимаемую им память, которая в дальнейшем может быть выделена под другие объекты. «Сборка мусора» периодически осуществляется в ходе всей программы.

В С# все же предусмотрена возможность создания деструктора, который удаляет объект перед «сборкой мусора». Он имеет следующую конструкцию:

~ <имя_класса> ()

{

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

}

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