بسم الله الرحمن الرحيم . كما هو واضح من الاسم ، يستخدم هذا ال interface للمقارنة ، ولذا من الطبيعي ان يكون شكل هذا ال interface بالشكل التالي : C#:
public interface IComparable { int CompareTo(object o); } |
vb.net: Public Interface IComparable Function CompareTo(ByVal o As Object) As Integer End Interface |
يمكنك ملاحظة ان الدالة تعيد قيمة رقمية ، فعلياً هي تعيد في المعتاد القيم 0 في حالة التساوي ، القيمة 1 في حالة كون الطرف الأول اكبر ، و -1 في حالة كون الطرف الأول أصغر . اما النقطة التي لدينا هنا فلسنا بحاجة لمعرفة هل يساوي هذا الكائن ذاك ام لا ، بل نحن في حاجة إلى معرفة ايهما اكبر او اصغر ، لنفترض ان لدينا كلاس للسيارات بالشكل التالي مثلاً : C#: class Car { string Name; int year; } |
vb.net: Class Car Private Name As String Private year As Integer End Class |
والآن نرغب في ترتيب السيارات بناء على تاريخ الصنع year ، لذا أول خطوة لدينا هي جعل الفئة الخاصة بنا تطبق الفئة IComparable : C#: class Car:IComparable { string Name; int year; } |
vb.net: class Car:IComparable { string Name; int year; } |
ثم نكتب بعض الاكواد في الدالة CompareTo ، لنفترض الشكل التالي مثلاً : c#: int IComparable.CompareTo(object obj) { Car temp = (Car)obj; if(this.year > temp.year) return 1; if(this.year < temp.year) return -1; else return 0; } |
vb.net: Private Function CompareTo(ByVal obj As Object) As Integer Implements IComparable.CompareTo Dim temp As Car = DirectCast(obj, Car) If Me.year > temp.year Then Return 1 End If If Me.year < temp.year Then Return -1 Else Return 0 End If End Function |
طبعاً لا داعي لتذكيرك بانك تستطيع اعادة -100 و 0 و 94 بدلاً من -1و0و1 ، لكن هذا لتسهيل المفهوم ، الدالة تعمل بدلالة رقم سالب يعني اصغر ، صفر يعني التساوي ورقم موجب يعني اكبر فقط دون ان يعنيها قيمة هذا الرقم الفعلية . الدالة Sort : لنفترض ان لدينا مصفوفة array من الارقام باسم myNumbers ، في هذه الحالة لو قمنا بكتابة الأمر التالي لكان الكود مفهوماً : c#: vb.net:
ولكن لو كان لدينا مصفوفة من السيارات ، وكتبنا هذا الكود لترتيبها فإن هذا بالتأكيد سيحدث خطأ . لكن في حالة كون الفئة car تطبق ال IComparable interface ، ففي هذه الحالة سيمكنك استخدام هذا الدالة ببساطة لإنها سوف تقوم بالمقارنة اعتماداً على دالة CompareTo التي قمت انت ببرمجتها ، ربما يكون هذا سبباً كافياً لتقوم بتطبيق هذا ال interface وكتابة كود الدالة بدلاً من كتابة دالة باسم check مثلاً او اي اسم آخر للقيام بنفس المهمة . هذا طبعاً بالاضافة لتسهيل استخدام الفئة الخاصة بكل لاحقاً ووضوحها لأي مبرمج آخر . |