Para criar uma instância de uma classe, chamas o respetivo construtor através do operador new. Um construtor é um tipo especial de método cujo objetivo é inicializar uma instância recém-criada. Os construtores são parecidos com os métodos normais, mas não têm tipo de retorno e o seu nome é igual ao da classe.
class Library
{
private int books;
public Library()
{
// Initialize the books field
this.books = 10;
}
}
// This will call the constructor
var library = new Library();
Tal como os métodos normais, os construtores podem ter parâmetros. Os parâmetros de um construtor costumam ser guardados como campos (privados) para serem acedidos mais tarde, ou então usados num cálculo pontual. Podes passar argumentos a um construtor tal como passas argumentos a métodos normais.
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)
Neste exercício vais organizar corridas entre vários tipos de carros telecomandados. Cada carro tem as suas próprias características de velocidade e de consumo de bateria.
Os carros começam com a bateria cheia (100%). Sempre que conduzes o carro com o telecomando, ele percorre uma distância igual à velocidade do carro, em metros, e a percentagem de bateria restante diminui no valor do seu consumo de bateria.
Se a bateria de um carro estiver abaixo da sua percentagem de consumo de bateria, já não podes conduzir o carro.
Cada pista tem a sua própria distância. Os carros são testados verificando se conseguem terminar a pista sem ficar sem bateria.
Tens seis tarefas, cada uma delas baseada em instâncias de carros telecomandados.
Permite criar um carro telecomandado definindo um construtor para a classe RemoteControlCar que recebe a velocidade do carro em metros e a percentagem de consumo de bateria como os seus dois parâmetros (ambos do tipo int):
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
Permite criar uma pista definindo um construtor para a classe RaceTrack que recebe a distância da pista em metros como o seu único parâmetro (que é do tipo int):
int distance = 800;
var raceTrack = new RaceTrack(distance);
Implementa o método RemoteControlCar.Drive() que atualiza o número de metros percorridos com base na velocidade do carro. Implementa também o método RemoteControlCar.DistanceDriven() para devolver o número de metros percorridos pelo carro:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();
car.DistanceDriven();
// => 5
Atualiza o método RemoteControlCar.Drive() para gastar bateria com base no consumo de bateria do carro. Implementa também o método RemoteControlCar.BatteryDrained() que indica se a bateria está descarregada:
int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();
car.BatteryDrained();
// => false
O carro telecomandado mais vendido é o Nitro, que tem uma velocidade máxima impressionante de 50 metros com um consumo de bateria de 4%. Implementa o método (estático) RemoteControlCar.Nitro() para devolver este tipo de carro:
var car = RemoteControlCar.Nitro();
car.Drive();
car.DistanceDriven();
// => 50
Para terminar uma pista, um carro tem de conseguir percorrer a distância da pista. Isto significa não gastar a bateria antes de cruzar a linha de chegada. Implementa o método RaceTrack.TryFinishTrack() que recebe uma instância de RemoteControlCar como parâmetro e devolve true se o carro conseguir terminar a pista; caso contrário, devolve 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
Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.