Per creare un'istanza di una classe si chiama il suo costruttore tramite l'operatore new. Un costruttore è un tipo speciale di metodo il cui scopo è inizializzare un'istanza appena creata. I costruttori sembrano metodi normali, ma senza tipo restituito e con un nome che coincide con quello della classe.
class Library
{
private int books;
public Library()
{
// Initialize the books field
this.books = 10;
}
}
// This will call the constructor
var library = new Library();
Come i metodi normali, i costruttori possono avere parametri. Di solito i parametri del costruttore vengono salvati in campi (privati) per essere usati più tardi, oppure servono per un calcolo una tantum. Gli argomenti si possono passare ai costruttori proprio come si passano gli argomenti ai metodi normali.
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)
In questo esercizio organizzerai delle gare tra vari tipi di auto radiocomandate. Ogni auto ha le proprie caratteristiche di velocità e di consumo della batteria.
Le auto partono con la batteria completamente carica (100%). Ogni volta che guidi l'auto con il radiocomando, questa percorre tanti metri quanti ne indica la sua velocità e riduce la percentuale di batteria rimanente del suo consumo della batteria.
Se la batteria di un'auto è al di sotto della sua percentuale di consumo della batteria, non puoi più guidarla.
Ogni pista ha la sua distanza. Le auto vengono messe alla prova verificando se riescono a completare la pista senza esaurire la batteria.
Hai sei compiti, ognuno dei quali lavorerà con istanze di auto radiocomandate.
Consenti di creare un'auto radiocomandata definendo un costruttore per la classe RemoteControlCar che accetta come suoi due parametri la velocità dell'auto in metri e la percentuale di consumo della batteria (entrambi di tipo int):
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
Consenti di creare una pista definendo un costruttore per la classe RaceTrack che accetta come unico parametro la distanza della pista in metri (di tipo int):
int distance = 800;
var raceTrack = new RaceTrack(distance);
Implementa il metodo RemoteControlCar.Drive() che aggiorna il numero di metri percorsi in base alla velocità dell'auto. Implementa anche il metodo RemoteControlCar.DistanceDriven() per restituire il numero di metri percorsi dall'auto:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();
car.DistanceDriven();
// => 5
Aggiorna il metodo RemoteControlCar.Drive() in modo che scarichi la batteria in base al consumo della batteria dell'auto. Implementa anche il metodo RemoteControlCar.BatteryDrained() che indica se la batteria è scarica:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();
car.BatteryDrained();
// => false
L'auto radiocomandata più venduta è la Nitro, che ha una velocità massima impressionante di 50 metri con un consumo della batteria del 4%. Implementa il metodo (statico) RemoteControlCar.Nitro() per restituire questo tipo di auto:
var car = RemoteControlCar.Nitro();
car.Drive();
car.DistanceDriven();
// => 50
Per completare una pista, un'auto deve essere in grado di percorrere la distanza della pista. Questo significa non esaurire la batteria prima di aver tagliato il traguardo. Implementa il metodo RaceTrack.TryFinishTrack() che accetta come parametro un'istanza di RemoteControlCar e restituisce true se l'auto può completare la pista; altrimenti, restituisci 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
Iscriviti a Exercism per imparare e padroneggiare C# con 62 concetti178 esercizi e il mentoring di persone reali, tutto gratis.