Щоб створити екземпляр класу, потрібно викликати його конструктор за допомогою оператора new. Конструктор - це особливий різновид методу, мета якого - ініціалізувати щойно створений екземпляр. Конструктори мають вигляд звичайних методів, але без типу повернення і з назвою, що збігається з назвою класу.
class Library
{
private int books;
public Library()
{
// Initialize the books field
this.books = 10;
}
}
// This will call the constructor
var library = new Library();
Як і звичайні методи, конструктори можуть мати параметри. Параметри конструктора зазвичай зберігають як (приватні) поля, щоб звертатися до них пізніше, або використовують у якомусь одноразовому обчисленні. Аргументи можна передавати конструкторам так само, як передають аргументи звичайним методам.
class Building
{
private int numberOfStories;
private int totalHeight;
public Building(int numberOfStories, double storyHeight)
{
this.numberOfStories = numberOfStories;
this.totalHeight = numberOfStories * storyHeight;
}
}
// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2)
У цій вправі ми будемо організовувати перегони між різними типами радіокерованих автомобілів. Кожен автомобіль має власні характеристики швидкості та розряджання батареї.
Автомобілі стартують із повністю зарядженими батареями (100%). Щоразу, коли ми керуємо автомобілем за допомогою пульта, він проїжджає відстань, що дорівнює швидкості автомобіля в метрах, і зменшує залишок заряду батареї на відсоток її розряджання.
Якщо заряд батареї автомобіля менший за відсоток її розряджання, ми більше не можемо керувати цим автомобілем.
Кожна гоночна траса має власну дистанцію. Автомобілі перевіряють, чи можуть вони завершити трасу, не розрядивши батарею.
На нас чекає шість завдань, кожне з яких працює з екземплярами радіокерованих автомобілів.
Дозвольте створити радіокерований автомобіль, визначивши конструктор для класу RemoteControlCar, який приймає швидкість автомобіля в метрах і відсоток розряджання батареї як свої два параметри (обидва типу int):
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
Дозвольте створити гоночну трасу, визначивши конструктор для класу RaceTrack, який приймає дистанцію траси в метрах як свій єдиний параметр (типу int):
int distance = 800;
var raceTrack = new RaceTrack(distance);
Реалізуйте метод RemoteControlCar.Drive(), який оновлює кількість пройдених метрів відповідно до швидкості автомобіля. Також реалізуйте метод RemoteControlCar.DistanceDriven(), який повертає кількість метрів, пройдених автомобілем:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();
car.DistanceDriven();
// => 5
Оновіть метод RemoteControlCar.Drive(), щоб він розряджав батарею відповідно до показника розряджання автомобіля. Також реалізуйте метод RemoteControlCar.BatteryDrained(), який показує, чи розряджена батарея:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();
car.BatteryDrained();
// => false
Найпопулярніший радіокерований автомобіль - це Nitro, який має вражаючу максимальну швидкість 50 метрів із розряджанням батареї 4%. Реалізуйте (статичний) метод RemoteControlCar.Nitro(), який повертає автомобіль цього типу:
var car = RemoteControlCar.Nitro();
car.Drive();
car.DistanceDriven();
// => 50
Щоб завершити гоночну трасу, автомобіль має бути здатним проїхати її дистанцію. Це означає не розрядити батарею, перш ніж перетнути фінішну лінію. Реалізуйте метод RaceTrack.TryFinishTrack(), який приймає екземпляр RemoteControlCar як свій параметр і повертає true, якщо автомобіль може завершити гоночну трасу; інакше повертає false:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
int distance = 100;
var raceTrack = new RaceTrack(distance);
raceTrack.TryFinishTrack(car);
// => true
Зареєструйтеся на Exercism, щоб вивчати й опановувати C#, а також 62 концепції178 вправ та справжнє наставництво від людей, і все це безкоштовно.