Μια διεπαφή είναι ένας τύπος που περιέχει μέλη τα οποία ορίζουν μια ομάδα σχετιζόμενης λειτουργικότητας. Απομακρύνει τις χρήσεις μιας κλάσης από την υλοποίηση, επιτρέποντας πολλαπλές διαφορετικές υλοποιήσεις ή υποστήριξη για κάποια γενική συμπεριφορά, όπως μορφοποίηση, σύγκριση ή μετατροπή.
Η σύνταξη μιας διεπαφής είναι παρόμοια με αυτή μιας κλάσης ή δομής, με τη διαφορά ότι οι μέθοδοι και οι ιδιότητες εμφανίζονται μόνο ως υπογραφή και δεν παρέχεται σώμα.
public interface ILanguage
{
string LanguageName { get; set; }
string Speak();
}
public class ItalianTaveller : ILanguage, ICloneable
{
public string LanguageName { get; set; } = "Italiano";
public string Speak()
{
return "Ciao mondo";
}
public object Clone()
{
ItalianTaveller it = new ItalianTaveller();
it.LanguageName = this.LanguageName;
return it;
}
}
Όλες οι λειτουργίες που ορίζει η διεπαφή πρέπει να υλοποιούνται.
Οι διεπαφές μπορούν να περιέχουν μεθόδους στιγμιότυπου και ιδιότητες, μεταξύ άλλων μελών
Για να μπορεί ένα αντικείμενο να συγκρίνεται με ένα άλλο αντικείμενο, πρέπει να υλοποιεί τη διεπαφή IComparable<T>.
Αυτή η διεπαφή έχει μία μόνο μέθοδο που πρέπει να υλοποιηθεί: int CompareTo(T other).
Υπάρχουν τρεις πιθανές τιμές επιστροφής για τη μέθοδο CompareTo:
Σε αυτή την άσκηση θα δουλέψεις λίγο ακόμα πάνω σε τηλεκατευθυνόμενα αυτοκίνητα.
Ένα πειραματικό αυτοκίνητο έχει αναπτυχθεί και η πίστα δοκιμών πρέπει να προσαρμοστεί ώστε να χειρίζεται τόσο τα μοντέλα παραγωγής όσο και τα πειραματικά. Οι δύο τύποι αυτοκινήτου έχουν ήδη κατασκευαστεί και πρέπει να βρεις έναν τρόπο να τους χειριστείς και τους δύο στην πίστα δοκιμών.
Επιπλέον, τα αυτοκίνητα παραγωγής αρχίζουν να έχουν κάποια επιτυχία. Το αφεντικό της ομάδας θέλει να διατηρήσει το ανταγωνιστικό πνεύμα δημοσιεύοντας μια κατάταξη των αυτοκινήτων παραγωγής.
Πρόσθεσε μια μέθοδο στη διεπαφή IRemoteControlCar ώστε να εκθέτει τις υλοποιήσεις της Drive() για τους δύο τύπους αυτοκινήτου.
TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Πρόσθεσε μια ιδιότητα στη διεπαφή IRemoteControlCar ώστε να εκθέτει τις υλοποιήσεις της ιδιότητας DistanceTravelled για τους δύο τύπους αυτοκινήτου.
var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20
Υλοποίησε τη διεπαφή IComparable<T> στην κλάση ProductionRemoteControlCar. Η προεπιλεγμένη σειρά ταξινόμησης για τα αυτοκίνητα θα πρέπει να είναι αύξουσα σειρά νικών.
Υλοποίησε τη στατική μέθοδο TestTrack.GetRankedCars() ώστε να επιστρέφει τα αυτοκίνητα που της περνάς, ταξινομημένα σε αύξουσα σειρά αριθμού νικών.
var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
Γράψου στο Exercism για να μάθεις και να κατακτήσεις C# με 62 έννοιες178 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.