Track
/
C#
C#
/
Esercizi
/
Competizione di radiocomando
Competizione di radiocomando

Competizione di radiocomando

Esercizio di apprendimento

Introduzione

Interfacce

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à

Ordinamento

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:

  • Un valore minore di zero: l'oggetto corrente è minore dell'altro oggetto.
  • Un valore maggiore di zero: l'oggetto corrente è maggiore dell'altro oggetto.
  • Un valore uguale a zero: l'oggetto corrente è uguale all'altro oggetto.

Istruzioni

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.

1. Permettere di guidare le auto sulla stessa pista di prova

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

2. Permettere di confrontare la distanza percorsa dai diversi modelli sulla pista di prova

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

3. Permettere di classificare le auto di produzione

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
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
C# Exercism

Vuoi iniziare Competizione di radiocomando?

Iscriviti a Exercism per imparare e padroneggiare C# con 62 concetti178 esercizi e il mentoring di persone reali, tutto gratis.