khaledbelal
02-26-2010, 04:22 PM
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
في الانواع الرئيسية لنا ، نستخدم المعاملات المختلفة لتنفيذ عمليات على الفئات المشتقة منها ، فمثلاً المتغير من نوع Integer يفهم المعامل + على انه جمع ، - على انه طرح ... الخ .
ايضاً المتغيرات من نوع String تفهم المتغير + مثلاً على انه لدمج نصين ، وهكذا .
الآن لو قمنا بعمل Structure من نوع Point بالشكل التالي مثلاً :
C#:
public struct Point
{
private int x, y;
public Point(int xPos, int yPos)
{
x = xPos;
y = yPos;
}
}
vb.net:
Public Structure Point
Private x As Integer, y As Integer
Public Sub New(ByVal xPos As Integer, ByVal yPos As
Integer)
x = xPos
y = yPos
End Sub
End Structure
الآن جرب تعريف عدة نقاط ، واستخدام المعامل + او - لجمع وطرح النقاط ، ما تتوقعه ان تشاهد الناتج
عبارة عن طرح ال x في النقطة الثانية من الأولى وكذا ال y ، أو جمعهما معاً ، إلا انك في الواقع لن
تحصل سوى على رسالة خطأ تفيدك بأن structure المسمى Point لا يدعم معاملات الجمع والطرح
.
الآن سنقوم باضافة معاملات جمع وطرح إلى ال structure السابق :
C#:
public struct Point
{
private int x, y;
public Point(int xPos, int yPos)
{
x = xPos;
y = yPos;
}
public static Point operator + (Point p1, Point p2)
{ return new Point(p1.x + p2.x, p1.y + p2.y); }
public static Point operator - (Point p1, Point p2)
{ return new Point(p1.x - p2.x, p1.y - p2.y); }
}
vb.net:
Public Structure Point
Private x As Integer, y As Integer
Public Sub New(ByVal xPos As Integer, ByVal yPos As
Integer)
x = xPos
y = yPos
End Sub
Public Shared Operator +(ByVal p1 As Point, ByVal p2
As Point) As Point
Return New Point(p1.x + p2.x, p1.y + p2.y)
End Operator
Public Shared Operator -(ByVal p1 As Point, ByVal p2
As Point) As Point
Return New Point(p1.x - p2.x, p1.y - p2.y)
End Operator
End Structure
الآن يمكنك كتابة كود بالشكل التالي :
Point p3 = p1 + p2;
ستحصل على النتيجة الصحيحة لعملية جمع ال Points .
ايضا يمكنك كتابة كود كالتالي مباشرة :
p2-=p1;
آخر ما سنتعرف عليه في هذا الجزء من الدرس ، انك لن تكون قادراً سوى على تعريف Static function من اجل عمل overloading لأي معامل .
ليست معاملات الجمع والطرح فقط من يمكن عمل overloading ، بل يمكنك عمل ذلك لأي نوع من المعاملات ، فمثلاً ++ و -- في السي شارب فقط :
public static Point operator ++(Point p1)
{ return new Point(p1.x+1, p1.y+1); }
public static Point operator --(Point p1)
{ return new Point(p1.x-1, p1.y-1); }
نفس الأمر بالنسبة لدوال المساواة وعمل == أو != حقيقية مثل ما تعلمنا سابقاً مع عمل overridding للدالة Equals ، سنعتمد هنا على هذه الدالة بالشكل التالي :
C#:
public override bool Equals(object o)
{
return o.ToString() == this.ToString();
}
public static bool operator ==(Point p1, Point p2)
{ return p1.Equals(p2); }
public static bool operator !=(Point p1, Point p2)
{ return !p1.Equals(p2); }
vb.net:
Public Overloads Overrides Function Equals(ByVal o As Object) As Boolean
Return o.ToString() = Me.ToString()
End Function
Public Shared Operator =(ByVal p1 As Point, ByVal p2 As Point) As Boolean
Return p1.Equals(p2)
End Operator
Public Shared Operator <>(ByVal p1 As Point, ByVal p2 As Point) As Boolean
Return Not p1.Equals(p2)
End Operator
وهكذا تجد ان بامكانك عمل overloading لأي من هذه المعاملات :
http://vb4arab.com/vb/uploaded/3/01208733266.jpg
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
السلام عليكم ورحمة الله وبركاته .
في الانواع الرئيسية لنا ، نستخدم المعاملات المختلفة لتنفيذ عمليات على الفئات المشتقة منها ، فمثلاً المتغير من نوع Integer يفهم المعامل + على انه جمع ، - على انه طرح ... الخ .
ايضاً المتغيرات من نوع String تفهم المتغير + مثلاً على انه لدمج نصين ، وهكذا .
الآن لو قمنا بعمل Structure من نوع Point بالشكل التالي مثلاً :
C#:
public struct Point
{
private int x, y;
public Point(int xPos, int yPos)
{
x = xPos;
y = yPos;
}
}
vb.net:
Public Structure Point
Private x As Integer, y As Integer
Public Sub New(ByVal xPos As Integer, ByVal yPos As
Integer)
x = xPos
y = yPos
End Sub
End Structure
الآن جرب تعريف عدة نقاط ، واستخدام المعامل + او - لجمع وطرح النقاط ، ما تتوقعه ان تشاهد الناتج
عبارة عن طرح ال x في النقطة الثانية من الأولى وكذا ال y ، أو جمعهما معاً ، إلا انك في الواقع لن
تحصل سوى على رسالة خطأ تفيدك بأن structure المسمى Point لا يدعم معاملات الجمع والطرح
.
الآن سنقوم باضافة معاملات جمع وطرح إلى ال structure السابق :
C#:
public struct Point
{
private int x, y;
public Point(int xPos, int yPos)
{
x = xPos;
y = yPos;
}
public static Point operator + (Point p1, Point p2)
{ return new Point(p1.x + p2.x, p1.y + p2.y); }
public static Point operator - (Point p1, Point p2)
{ return new Point(p1.x - p2.x, p1.y - p2.y); }
}
vb.net:
Public Structure Point
Private x As Integer, y As Integer
Public Sub New(ByVal xPos As Integer, ByVal yPos As
Integer)
x = xPos
y = yPos
End Sub
Public Shared Operator +(ByVal p1 As Point, ByVal p2
As Point) As Point
Return New Point(p1.x + p2.x, p1.y + p2.y)
End Operator
Public Shared Operator -(ByVal p1 As Point, ByVal p2
As Point) As Point
Return New Point(p1.x - p2.x, p1.y - p2.y)
End Operator
End Structure
الآن يمكنك كتابة كود بالشكل التالي :
Point p3 = p1 + p2;
ستحصل على النتيجة الصحيحة لعملية جمع ال Points .
ايضا يمكنك كتابة كود كالتالي مباشرة :
p2-=p1;
آخر ما سنتعرف عليه في هذا الجزء من الدرس ، انك لن تكون قادراً سوى على تعريف Static function من اجل عمل overloading لأي معامل .
ليست معاملات الجمع والطرح فقط من يمكن عمل overloading ، بل يمكنك عمل ذلك لأي نوع من المعاملات ، فمثلاً ++ و -- في السي شارب فقط :
public static Point operator ++(Point p1)
{ return new Point(p1.x+1, p1.y+1); }
public static Point operator --(Point p1)
{ return new Point(p1.x-1, p1.y-1); }
نفس الأمر بالنسبة لدوال المساواة وعمل == أو != حقيقية مثل ما تعلمنا سابقاً مع عمل overridding للدالة Equals ، سنعتمد هنا على هذه الدالة بالشكل التالي :
C#:
public override bool Equals(object o)
{
return o.ToString() == this.ToString();
}
public static bool operator ==(Point p1, Point p2)
{ return p1.Equals(p2); }
public static bool operator !=(Point p1, Point p2)
{ return !p1.Equals(p2); }
vb.net:
Public Overloads Overrides Function Equals(ByVal o As Object) As Boolean
Return o.ToString() = Me.ToString()
End Function
Public Shared Operator =(ByVal p1 As Point, ByVal p2 As Point) As Boolean
Return p1.Equals(p2)
End Operator
Public Shared Operator <>(ByVal p1 As Point, ByVal p2 As Point) As Boolean
Return Not p1.Equals(p2)
End Operator
وهكذا تجد ان بامكانك عمل overloading لأي من هذه المعاملات :
http://vb4arab.com/vb/uploaded/3/01208733266.jpg
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .