منتدى رياض الجنة - Riad Al-Ganah

منتدى رياض الجنة - Riad Al-Ganah (https://montada.khaledbelal.com/index.php)
-   دورة .NET 2008 من منتدى فيجوال بيسك للعرب (https://montada.khaledbelal.com/forumdisplay.php?f=57)
-   -   الدرس الثالث والأربعون : Operator Overloading دورة .net 2008 (https://montada.khaledbelal.com/showthread.php?t=588)

khaledbelal 02-26-2010 04:22 PM

الدرس الثالث والأربعون : Operator Overloading دورة .net 2008
 
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

في الانواع الرئيسية لنا ، نستخدم المعاملات المختلفة لتنفيذ عمليات على الفئات المشتقة منها ، فمثلاً المتغير من نوع Integer يفهم المعامل + على انه جمع ، - على انه طرح ... الخ .

ايضاً المتغيرات من نوع String تفهم المتغير + مثلاً على انه لدمج نصين ، وهكذا .

الآن لو قمنا بعمل Structure من نوع Point بالشكل التالي مثلاً :
C#:
كود PHP:

public struct Point
{
private 
int xy;
public 
Point(int xPosint yPos)
{
xPos;
yPos;
}


vb.net:
كود PHP:

Public Structure Point 
  
Private As IntegerAs Integer 
  
Public Sub New(ByVal xPos As IntegerByVal yPos As 
Integer
      
xPos 
      y 
yPos 
  End Sub 
End Structure 

الآن جرب تعريف عدة نقاط ، واستخدام المعامل + او - لجمع وطرح النقاط ، ما تتوقعه ان تشاهد الناتج
عبارة عن طرح ال x في النقطة الثانية من الأولى وكذا ال y ، أو جمعهما معاً ، إلا انك في الواقع لن
تحصل سوى على رسالة خطأ تفيدك بأن structure المسمى Point لا يدعم معاملات الجمع والطرح
.
الآن سنقوم باضافة معاملات جمع وطرح إلى ال structure السابق :

C#:
كود PHP:

public struct Point
{
private 
int xy;
public 
Point(int xPosint yPos)
{
xPos;
yPos;
}
 
public static 
Point operator + (Point p1Point p2)
{ return new 
Point(p1.p2.xp1.p2.y); }
public static 
Point operator - (Point p1Point p2)
{ return new 
Point(p1.p2.xp1.p2.y); }


vb.net:
كود PHP:

Public Structure Point 
  
Private As IntegerAs Integer 
  
Public Sub New(ByVal xPos As IntegerByVal yPos As 
Integer
      
xPos 
      y 
yPos 
  End Sub 
 
 
  
Public Shared Operator +(ByVal p1 As PointByVal p2 
As Point) As Point 
      
Return New Point(p1.p2.xp1.p2.y
  
End Operator 
 
  
Public Shared Operator -(ByVal p1 As PointByVal p2 
As Point) As Point 
      
Return New Point(p1.p2.xp1.p2.y
  
End Operator 
End Structure 

الآن يمكنك كتابة كود بالشكل التالي :
كود PHP:

Point p3 p1 p2

ستحصل على النتيجة الصحيحة لعملية جمع ال Points .

ايضا يمكنك كتابة كود كالتالي مباشرة :
كود PHP:

p2-=p1

آخر ما سنتعرف عليه في هذا الجزء من الدرس ، انك لن تكون قادراً سوى على تعريف Static function من اجل عمل overloading لأي معامل .

ليست معاملات الجمع والطرح فقط من يمكن عمل overloading ، بل يمكنك عمل ذلك لأي نوع من المعاملات ، فمثلاً ++ و -- في السي شارب فقط :
كود PHP:

public static Point operator ++(Point p1)
{ return new 
Point(p1.x+1p1.y+1); }
public static 
Point operator --(Point p1)
{ return new 
Point(p1.x-1p1.y-1); } 

نفس الأمر بالنسبة لدوال المساواة وعمل == أو != حقيقية مثل ما تعلمنا سابقاً مع عمل overridding للدالة Equals ، سنعتمد هنا على هذه الدالة بالشكل التالي :

C#:

كود PHP:

public override bool Equals(object o)
{
return 
o.ToString() == this.ToString();
}
public static 
bool operator ==(Point p1Point p2)
{ return 
p1.Equals(p2); }
public static 
bool operator !=(Point p1Point p2)
{ return !
p1.Equals(p2); } 

vb.net:
كود PHP:

Public Overloads Overrides Function Equals(ByVal o As Object) As Boolean 
    
Return o.ToString() = Me.ToString() 
End Function 
Public 
Shared Operator =(ByVal p1 As PointByVal p2 As Point) As Boolean 
    
    
    
Return p1.Equals(p2
End Operator 
Public Shared Operator <>(ByVal p1 As PointByVal p2 As Point) As Boolean 
    
    
Return Not p1.Equals(p2
End Operator 

وهكذا تجد ان بامكانك عمل overloading لأي من هذه المعاملات :

http://vb4arab.com/vb/uploaded/3/01208733266.jpg

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .


الساعة الآن 06:41 PM.

Powered by vBulletin® v3.8.4, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. , TranZ By Almuhajir
النسخة الفضية

Ads Management Version 3.0.1 by Saeed Al-Atwi

a.d - i.s.s.w