Інтерфейс - це тип, що містить члени, які визначають групу повʼязаної функціональності. Він відокремлює використання класу від реалізації, що дозволяє мати кілька різних реалізацій або підтримку якоїсь загальної поведінки, як-от форматування, порівняння чи перетворення.
Синтаксис інтерфейсу схожий на синтаксис класу чи структури, за винятком того, що методи і властивості подано лише як сигнатуру, а тіла не наведено.
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;
}
}
Усі операції, визначені інтерфейсом, потрібно реалізувати.
Інтерфейси можуть містити методи екземпляра та властивості, а також інші члени.
Щоб мати змогу порівняти один обʼєкт з іншим, він має реалізувати інтерфейс IComparable<T>.
Цей інтерфейс має єдиний метод, який потрібно реалізувати: int CompareTo(T other).
Метод CompareTo може повернути три значення:
У цій вправі ми попрацюємо ще трохи з радіокерованими автомобілями.
Розробили експериментальний автомобіль, і тепер випробувальний трек потрібно адаптувати так, щоб він приймав і серійні, й експериментальні моделі. Обидва типи автомобілів уже створено, і нам потрібно знайти спосіб працювати з ними обома на випробувальному треку.
Крім того, серійні автомобілі починають показувати непогані результати. Керівник команди хоче підтримати змагальний дух, опублікувавши рейтинг серійних автомобілів.
Додайте метод до інтерфейсу IRemoteControlCar, який надає доступ до реалізацій Drive() для обох типів автомобілів.
TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Додайте властивість до інтерфейсу IRemoteControlCar, яка надає доступ до реалізацій властивості DistanceTravelled для обох типів автомобілів.
var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20
Реалізуйте інтерфейс IComparable<T> у класі ProductionRemoteControlCar. Типовий порядок сортування автомобілів має бути за зростанням кількості перемог.
Реалізуйте статичний метод TestTrack.GetRankedCars(), який повертає передані автомобілі, відсортовані за зростанням кількості перемог.
var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
Зареєструйтеся на Exercism, щоб вивчати й опановувати C#, а також 62 концепції178 вправ та справжнє наставництво від людей, і все це безкоштовно.