На цьому уроці ми поговоримо про такі важливі члени класу, як конструктори.
Конструктор - це метод класу, призначений для ініціалізації об'єкту при його створенні. Ініціалізація - це завдання початкових параметрів об'єктів / змінних при їх створенні.
Особливістю конструктора, як методу, є те, що його ім'я завжди збігається з ім'ям класу, в якому він оголошується. При цьому, при оголошенні конструктора, не потрібно вказувати повертається тип, навіть ключове слово void. Конструктор слід оголошувати як public, інакше об'єкт не можна буде створити (хоча іноді в цьому також є сенс).
У класі, в якому не оголошений жоден конструктор, існує неявний конструктор за замовчуванням, який викликається при створенні об'єкта за допомогою оператора new.
Оголошення конструктора має наступну структуру:
public [ім'я_класу] ([аргументи])
{
// Тіло конструктора
}
Наприклад, у нас є клас Автомобіль. Створюючи новий автомобіль, значення пробігу та кількості палива в баку є сенс поставити рівними нулю:
class Car
{
private double mileage;
private double fuel;
public Car () // оголошення конструктора
{
mileage = 0;
fuel = 0;
}
}
class Program
{
static void Main (string [] args)
{
Car newCar = new Car (); // Створення об'єкта і виклик конструктора
}
}
Без конструктора нам би довелося після створення об'єкта окремо присвоювати значення його полях, що дуже незручно.
Конструктор також може мати параметри.
Приклад з тим же автомобілем, тільки тепер при створенні об'єкта ми можемо задати будь-які початкові значення:
class Car
{
private double mileage;
private double fuel;
public Car (double mileage, double fuel)
{
this.mileage = mileage;
this.fuel = fuel;
}
}
class Program
{
static void Main (string [] args)
{
Car newCar = new Car (100, 50); // виклик конструктора з параметрами
}
}
Ключове слово this
В наведеному вище прикладі використовується ключове слово this.
Покажчик this - це покажчик на об'єкт, для якого був викликаний нестатичних метод. Ключове слово this забезпечує доступ до поточного екземпляру класу. Класичний приклад використання this, це якраз в конструкторах, при однакових іменах полів класу і аргументів конструктора. Ключове слово this це щось на зразок імені об'єкта, через яке ми маємо доступ до поточного об'єкту.
Кілька конструкторів
У класі можливо вказувати безліч конструкторів, головне щоб вони відрізнялися сигнатурами. Сигнатура, у разі конструкторів, - це набір аргументів. Наприклад, не можна створити два конструктора, які беруть два аргументи типу int.
Приклад використання декількох конструкторів:
class Car
{
private double mileage;
private double fuel;
public Car ()
{
mileage = 0;
fuel = 0;
}
public Car (double mileage, double fuel)
{
this.mileage = mileage;
this.fuel = fuel;
}
}
class Program
{
static void Main (string [] args)
{
Car newCar = new Car (); // Створюємо автомобіль з параметрами за замовчуванням, 0 і 0
Car newCar2 = new Car (100, 50); // Створюємо автомобіль з вказаними параметрами
}
}
Якщо в класі визначено один або кілька конструкторів з параметрами, ми не зможемо створити об'єкт через неявний конструктор за замовчуванням:
class Car
{
private double mileage;
private double fuel;
public Car (double mileage, double fuel)
{
this.mileage = mileage;
this.fuel = fuel;
}
}
class Program
{
static void Main (string [] args)
{
Car newCar = new Car (100, 50);
Car newCar2 = new Car (); // Помилка, в класі не визначений конструктор без параметрів
}
}
Домашнє завдання
Створіть клас Студент, визначте в ньому поля: ім'я, курс, чи є у нього стипендія. Створіть у класі кілька конструкторів, для можливості завдання відразу всіх зазначених параметрів або декількох при створенні екземплярів.
PS. Буду дуже вдячний, якщо поділитеся з друзями цією статтею за допомогою кнопок соціальних мереж в кінці поста.