Δημιουργείς ένα στιγμιότυπο μιας κλάσης καλώντας τον κατασκευαστή της μέσω του τελεστή 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 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.