Tracks
/
C#
C#
/
Übungen
/
Fernbedienungs-Wettbewerb
Fernbedienungs-Wettbewerb

Fernbedienungs-Wettbewerb

Lernübung

Einführung

Interfaces

Ein Interface ist ein Typ, der Member enthält, die eine Gruppe zusammengehöriger Funktionalität definieren. Es entkoppelt die Verwendung einer Klasse von der Implementierung und ermöglicht so mehrere verschiedene Implementierungen oder die Unterstützung von generischem Verhalten wie Formatierung, Vergleich oder Konvertierung.

Die Syntax eines Interfaces ähnelt der einer Klasse oder Struktur, mit dem Unterschied, dass Methoden und Eigenschaften nur als Signatur erscheinen und kein Körper angegeben wird.

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;
    }
}

Alle Operationen, die das Interface definiert, müssen implementiert werden.

Interfaces können unter anderem Instanzmethoden und Eigenschaften enthalten.

Sortierung

Damit ein Objekt mit einem anderen Objekt verglichen werden kann, muss es das Interface IComparable<T> implementieren. Dieses Interface hat eine einzige Methode, die implementiert werden muss: int CompareTo(T other).

Für die Methode CompareTo gibt es drei mögliche Rückgabewerte:

  • Wert kleiner als null: Das aktuelle Objekt ist kleiner als das andere Objekt.
  • Wert größer als null: Das aktuelle Objekt ist größer als das andere Objekt.
  • Wert gleich null: Das aktuelle Objekt ist gleich dem anderen Objekt.

Anleitung

In dieser Übung arbeitest du weiter an ferngesteuerten Autos.

Ein experimentelles Auto wurde entwickelt, und die Teststrecke muss angepasst werden, damit sie sowohl Serien- als auch Experimentalmodelle bewältigen kann. Die beiden Autotypen sind bereits gebaut, und du musst einen Weg finden, mit beiden auf der Teststrecke umzugehen.

Außerdem beginnen die Serienautos, Erfolge zu erzielen. Der Teamchef möchte den Wettbewerbsgeist erhalten, indem er eine Rangliste der Serienautos veröffentlicht.

1. Ermögliche, dass Autos auf derselben Teststrecke gefahren werden können

Bitte füge dem Interface IRemoteControlCar eine Methode hinzu, die die Implementierungen von Drive() für die beiden Autotypen verfügbar macht.

TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown

2. Ermögliche, dass die von verschiedenen Modellen auf der Teststrecke zurückgelegte Strecke verglichen werden kann

Bitte füge dem Interface IRemoteControlCar eine Eigenschaft hinzu, die die Implementierungen der Eigenschaft DistanceTravelled für die beiden Autotypen verfügbar macht.

var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20

3. Ermögliche eine Rangliste der Serienautos

Bitte implementiere das Interface IComparable<T> in der Klasse ProductionRemoteControlCar. Die standardmäßige Sortierreihenfolge der Autos soll aufsteigend nach Siegen sein.

Implementiere die statische Methode TestTrack.GetRankedCars(), die die übergebenen Autos aufsteigend nach der Anzahl der Siege sortiert zurückgibt.

var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
C# Exercism

Bereit, mit Fernbedienungs-Wettbewerb zu starten?

Melde dich bei Exercism an, um C# mit 62 Konzepte178 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.