Az interfész egy olyan típus, amelynek tagjai egy összetartozó funkcionalitáscsoportot határoznak meg. Elválasztja az osztály használatát annak implementációjától, ami lehetővé teszi több különböző implementáció létét, illetve olyan általános viselkedés támogatását, mint a formázás, az összehasonlítás vagy a konverzió.
Az interfész szintaxisa hasonlít az osztályéhoz vagy a struktúráéhoz, azzal a különbséggel, hogy a metódusok és a tulajdonságok csak szignatúraként jelennek meg, törzs nélkül.
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;
}
}
Az interfészben meghatározott összes műveletet implementálni kell.
Az interfészek a többi tag mellett példánymetódusokat és tulajdonságokat is tartalmazhatnak
Ahhoz, hogy egy objektum összehasonlítható legyen egy másikkal, implementálnia kell az IComparable<T> interfészt.
Ennek az interfésznek egyetlen metódusa van, amelyet implementálni kell: int CompareTo(T other).
A CompareTo metódusnak három lehetséges visszatérési értéke van:
Ebben a feladatban ismét a távirányítós autókkal fogsz dolgozni.
Kifejlesztettek egy kísérleti autót, és a tesztpályát alkalmassá kell tenni arra, hogy mind a sorozatgyártású, mind a kísérleti modelleket kezelni tudja. A két típusú autót már megépítették, és neked kell megoldást találnod arra, hogy mindkettőt kezelni tudd a tesztpályán.
Ráadásul a sorozatgyártású autók kezdenek sikereket elérni. A csapatvezető szeretné fenntartani a versenyszellemet azzal, hogy közzéteszi a sorozatgyártású autók rangsorát.
Adj hozzá egy metódust az IRemoteControlCar interfészhez, amellyel elérhetővé válnak a Drive() implementációi mindkét autótípus számára.
TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Adj hozzá egy tulajdonságot az IRemoteControlCar interfészhez, amellyel elérhetővé válnak a DistanceTravelled tulajdonság implementációi mindkét autótípus számára.
var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20
Implementáld az IComparable<T> interfészt a ProductionRemoteControlCar osztályban. Az autók alapértelmezett rendezési sorrendje a győzelmek számának növekvő sorrendje legyen.
Implementáld a statikus TestTrack.GetRankedCars() metódust úgy, hogy a kapott autókat a győzelmek számának növekvő sorrendjében adja vissza.
var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C# nyelvet 62 fogalom178 feladat segítségével, valódi emberi mentorálással, mindez ingyen.