الواجهة نوع يحتوي على أعضاء تعرّف مجموعة من الوظائف المترابطة. وهي تفصل استخدامات الصنف عن التنفيذ، بما يتيح عدة تنفيذات مختلفة أو دعم سلوك عام مثل التنسيق أو المقارنة أو التحويل.
تشبه صياغة الواجهة صياغة الصنف أو البنية، إلا أن الطرق والخصائص تظهر كتوقيع فقط دون تقديم أي جسم لها.
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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.