مشاريع
أقسام المقالات
Total Articles: 19
مؤتمرات وأحداث
مراكز وانجازات
.net 2008 Course
آخر 10 مواضيع
كتب وملخصات
Tips & Tricks
IComparable Interface
الثلاثاء، ١٧ يونيو ٢٠٠٨

بسم الله الرحمن الرحيم .

كما هو واضح من الاسم ، يستخدم هذا ال 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#:

Array.Sort(myNumbers);


vb.net:

Array.Sort(myNumbers)

ولكن لو كان لدينا مصفوفة من السيارات ، وكتبنا هذا الكود لترتيبها فإن هذا بالتأكيد سيحدث خطأ .

لكن في حالة كون الفئة car تطبق ال IComparable interface ، ففي هذه الحالة سيمكنك استخدام هذا الدالة ببساطة لإنها سوف تقوم بالمقارنة اعتماداً على دالة CompareTo التي قمت انت ببرمجتها ، ربما يكون هذا سبباً كافياً لتقوم بتطبيق هذا ال interface وكتابة كود الدالة بدلاً من كتابة دالة باسم check مثلاً او اي اسم آخر للقيام بنفس المهمة . هذا طبعاً بالاضافة لتسهيل استخدام الفئة الخاصة بكل لاحقاً ووضوحها لأي مبرمج آخر .

تم التحرير بواسطة Ahmed Gamal @ ٨:٣٥ م  
0 Comments:
إرسال تعليق
<< Home
 
الصفحة الرئيسية
Google Search
Google
       

كتاب المدونة
من نحن ؟
مجموعة من الكتاب باللغة العربية بلغة الدوت نت ، نلتقي هنا لكي نتشارك الخبرات والمعلومات حول الجديد في عالم الدوت نت
ارشيف المواضيغ والمقالات السابقة
VB.net <> C#

الفروقات بين سي شارب و في بي . نت
روابط ومواقع تقنية عربية
عداد الزيارات
Locations of visitors to this page
أشخاص شرفونا بزيارتهم
مركز التحميل
© 2005 DotNet4Arab Blogspot Template by Isnaini Dot Com