Un'interfaccia è un tipo che contiene membri che definiscono un gruppo di funzionalità correlate. Separa gli utilizzi di una classe dall'implementazione, permettendo più implementazioni diverse o il supporto di comportamenti generici come la formattazione, il confronto o la conversione.
La sintassi di un'interfaccia è simile a quella di una classe o di una struct, con la differenza che metodi e proprietà compaiono solo come firma e non viene fornito alcun corpo.
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;
}
}
Tutte le operazioni definite dall'interfaccia devono essere implementate.
Le interfacce possono contenere, tra gli altri membri, metodi di istanza e proprietà
Per permettere a un oggetto di essere confrontato con un altro oggetto, deve implementare l'interfaccia IComparable<T>.
Questa interfaccia ha un unico metodo che deve essere implementato: int CompareTo(T other).
Il metodo CompareTo può restituire tre valori diversi:
In questo esercizio lavorerai ancora un po' sulle auto telecomandate.
È stata sviluppata un'auto sperimentale e la pista di prova deve essere adattata per gestire sia i modelli di produzione che quelli sperimentali. I due tipi di auto sono già stati costruiti e devi trovare un modo per gestirli entrambi sulla pista di prova.
Inoltre, le auto di produzione stanno iniziando ad avere un certo successo. Il capo del team vuole mantenere lo spirito competitivo pubblicando una classifica delle auto di produzione.
Aggiungi un metodo all'interfaccia IRemoteControlCar per esporre le implementazioni di Drive() per i due tipi di auto.
TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Aggiungi una proprietà all'interfaccia IRemoteControlCar per esporre le implementazioni della proprietà DistanceTravelled per i due tipi di auto.
var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20
Implementa l'interfaccia IComparable<T> nella classe ProductionRemoteControlCar. L'ordine di ordinamento predefinito delle auto deve essere quello crescente di vittorie.
Implementa il metodo statico TestTrack.GetRankedCars() in modo che restituisca le auto passate ordinate in ordine crescente di numero di vittorie.
var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
Iscriviti a Exercism per imparare e padroneggiare C# con 62 concetti178 esercizi e il mentoring di persone reali, tutto gratis.