14-10-12, 04:35 PM
كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .السلام عليكم ورحمة الله وبركاته .
في الانواع الرئيسية لنا ، نستخدم المعاملات المختلفة لتنفيذ عمليات على الفئات المشتقة منها ، فمثلاً المتغير من نوع Integer يفهم المعامل + على انه جمع ، - على انه طرح ... الخ .
ايضاً المتغيرات من نوع String تفهم المتغير + مثلاً على انه لدمج نصين ، وهكذا .
الآن لو قمنا بعمل Structure من نوع Point بالشكل التالي مثلاً :
C#:
كود :
[FONT=Tahoma]public struct Point[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]private int x, y;[/FONT]
[FONT=Tahoma]public Point(int xPos, int yPos)[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]x = xPos;[/FONT]
[FONT=Tahoma]y = yPos;[/FONT]
[FONT=Tahoma]}[/FONT]
[FONT=Tahoma]}[/FONT]
vb.net:
كود :
[FONT=Tahoma]Public Structure Point [/FONT]
[FONT=Tahoma]Private x As Integer, y As Integer [/FONT]
[FONT=Tahoma]Public Sub New(ByVal xPos As Integer, ByVal yPos As [/FONT]
[FONT=Tahoma]Integer) [/FONT]
[FONT=Tahoma]x = xPos [/FONT]
[FONT=Tahoma]y = yPos [/FONT]
[FONT=Tahoma]End Sub [/FONT]
[FONT=Tahoma]End Structure[/FONT]
الآن جرب تعريف عدة نقاط ، واستخدام المعامل + او - لجمع وطرح النقاط ، ما تتوقعه ان تشاهد الناتج
عبارة عن طرح ال x في النقطة الثانية من الأولى وكذا ال y ، أو جمعهما معاً ، إلا انك في الواقع لن
تحصل سوى على رسالة خطأ تفيدك بأن structure المسمى Point لا يدعم معاملات الجمع والطرح
.
الآن سنقوم باضافة معاملات جمع وطرح إلى ال structure السابق :
C#:
كود :
[FONT=Tahoma]public struct Point[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]private int x, y;[/FONT]
[FONT=Tahoma]public Point(int xPos, int yPos)[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]x = xPos;[/FONT]
[FONT=Tahoma]y = yPos;[/FONT]
[FONT=Tahoma]}[/FONT]
[FONT=Tahoma]public static Point operator + (Point p1, Point p2)[/FONT]
[FONT=Tahoma]{ return new Point(p1.x + p2.x, p1.y + p2.y); }[/FONT]
[FONT=Tahoma]public static Point operator - (Point p1, Point p2)[/FONT]
[FONT=Tahoma]{ return new Point(p1.x - p2.x, p1.y - p2.y); }[/FONT]
[FONT=Tahoma]}[/FONT]
vb.net:
كود :
[FONT=Tahoma]Public Structure Point [/FONT]
[FONT=Tahoma]Private x As Integer, y As Integer [/FONT]
[FONT=Tahoma]Public Sub New(ByVal xPos As Integer, ByVal yPos As [/FONT]
[FONT=Tahoma]Integer) [/FONT]
[FONT=Tahoma]x = xPos [/FONT]
[FONT=Tahoma]y = yPos [/FONT]
[FONT=Tahoma]End Sub [/FONT]
[FONT=Tahoma]Public Shared Operator +(ByVal p1 As Point, ByVal p2 [/FONT]
[FONT=Tahoma]As Point) As Point [/FONT]
[FONT=Tahoma]Return New Point(p1.x + p2.x, p1.y + p2.y) [/FONT]
[FONT=Tahoma]End Operator [/FONT]
[FONT=Tahoma]Public Shared Operator -(ByVal p1 As Point, ByVal p2 [/FONT]
[FONT=Tahoma]As Point) As Point [/FONT]
[FONT=Tahoma]Return New Point(p1.x - p2.x, p1.y - p2.y) [/FONT]
[FONT=Tahoma]End Operator [/FONT]
[FONT=Tahoma]End Structure [/FONT]
الآن يمكنك كتابة كود بالشكل التالي :
كود :
[FONT=Tahoma]Point p3 = p1 + p2;[/FONT]
ستحصل على النتيجة الصحيحة لعملية جمع ال Points .
ايضا يمكنك كتابة كود كالتالي مباشرة :
كود :
[FONT=Tahoma]p2-=p1;[/FONT]
آخر ما سنتعرف عليه في هذا الجزء من الدرس ، انك لن تكون قادراً سوى على تعريف Static function من اجل عمل overloading لأي معامل .
يتبع ...