Une interface est un type qui contient des membres définissant un ensemble de fonctionnalités liées. Elle sépare les utilisations d'une classe de son implémentation, ce qui permet plusieurs implémentations différentes ou la prise en charge d'un comportement générique tel que le formatage, la comparaison ou la conversion.
La syntaxe d'une interface est semblable à celle d'une classe ou d'un struct, à ceci près que les méthodes et les propriétés n'y apparaissent que sous forme de signature et qu'aucun corps n'est fourni.
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;
}
}
Toutes les opérations définies par l'interface doivent être implémentées.
Les interfaces peuvent contenir, entre autres membres, des méthodes et des propriétés d'instance.
Pour qu'un objet puisse être comparé à un autre objet, il doit implémenter l'interface IComparable<T>.
Cette interface prend une seule méthode à implémenter : int CompareTo(T other).
La méthode CompareTo peut renvoyer trois valeurs possibles :
Dans cet exercice, on va continuer à travailler sur des voitures télécommandées.
Une voiture expérimentale a été développée et la piste d'essai doit être adaptée pour prendre en charge à la fois les modèles de série et les modèles expérimentaux. Les deux types de voiture ont déjà été construits et tu dois trouver un moyen de les gérer tous les deux sur la piste d'essai.
En plus, les voitures de série commencent à remporter quelques succès. Le chef d'équipe tient à entretenir l'esprit de compétition en publiant un classement des voitures de série.
Ajoute une méthode à l'interface IRemoteControlCar pour exposer les implémentations de Drive() pour les deux types de voiture.
TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Ajoute une propriété à l'interface IRemoteControlCar pour exposer les implémentations de la propriété DistanceTravelled pour les deux types de voiture.
var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20
Implémente l'interface IComparable<T> dans la classe ProductionRemoteControlCar. L'ordre de tri par défaut des voitures doit être l'ordre croissant des victoires.
Implémente la méthode statique TestTrack.GetRankedCars() pour renvoyer les voitures passées en argument, triées par ordre croissant du nombre de victoires.
var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.