عرض مشاركة واحدة
  #1  
قديم 02-25-2010, 02:37 PM
الصورة الرمزية khaledbelal
khaledbelal khaledbelal غير متواجد حالياً
مبرمج المنتدى
الادارة تكليف لا تشريف
 
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
افتراضي الدرس الثاني والثلاثون : ال Delegates دورة .net 2008

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

نواصل رحلتنا مع ال advanced .net programming ، موعدنا اليوم مع ال Delegates .

قبل ان نشرح تركيبها وكيفية التعامل معها ، سنقوم بشرح لماذا نقوم باستخدامها .

لنفترض عدة دوال تستقبل int وتعيد int ايضاً خاصة بعمليات التحويل ، وهي على الشكل التالي :
C#:
كود PHP:
public int ConvertEGToD(int EG)
       {
           return 
EG 5.45;
       }
       public 
int ConvertRSToD(int RS)
       {
           return 
RS 3.75;
       }
 
       public 
int ConvertEGToRS(int EG)
       {
           return 
EG 1.45;
       }
       public 
int ConvertDToRS(int D)
       {
           return 
3.75;
       }
       public 
int ConvertDToEG(int D)
       {
           return 
5.45;
       }
 
       public 
int ConvertRSToEG(int RS)
       {
           return 
RS 1.45;
       } 
vb.net:
كود PHP:
Public Function ConvertEGToD(ByVal EG As Integer) As Integer 
   
Return EG 5.45 
End 
Function 
Public Function 
ConvertRSToD(ByVal RS As Integer) As Integer 
   
Return RS 3.75 
End 
Function 
 
Public Function 
ConvertEGToRS(ByVal EG As Integer) As Integer 
   
Return EG 1.45 
End 
Function 
Public Function 
ConvertDToRS(ByVal D As Integer) As Integer 
   
Return 3.75 
End 
Function 
Public Function 
ConvertDToEG(ByVal D As Integer) As Integer 
   
Return 5.45 
End 
Function 
 
Public Function 
ConvertRSToEG(ByVal RS As Integer) As Integer 
   
Return RS 1.45 
End 
Function 
كما لاحظت فعلاً ، فهي عدة دوال تستخدم للتحويلات المختلفة بين ثلاث عملات ، الجنية المصري والريال السعودي والدولار الأمريكي .
طبعاً يمكننا عملهم في دالة واحدة وارسال متغير يمثل رقم التحويل ، لكننا لن نستطيع عمل ذلك مثلاً مع دوال اكبر ومختلفة ، لذا فهذا المثال للتوضيح .
الآن في برنامجنا سنقرأ البيانات من المستخدم ، ومن ثم نستخدم جملة شرط if او switch لتحديد اي دالة سنقوم بارسال البيانات إليها ، هذا مختصر للكود المكتوب :
C#:
كود PHP:
            if (Operation == 0)

               
result ConvertDToEG(userInput);
           else if(
Operation == 1)
               
result ConvertRSToD(userInput); 
vb.net:
كود PHP:
If Operation 0 Then

   result 
ConvertDToEG(userInput
ElseIf 
Operation 1 Then 
   result 
ConvertRSToD(userInput
End If 
ولكن لنفترض اننا فقط الآن نود معرفة نوع العملية دون تنفيذها وعرضها للمستخدم حيث سننفذها لاحقاً ، هذا يعني اننا سنقوم بذات الاختبار مرتين ، مرة للعرض على المستخدم ومرة لتنفيذ العملية ، ايضاً ألا تتفق معي في انك قد تحتاج لتنفيذ العملية مرتين في مكانين مختلفين ، وما دمت لا تحتفظ سوى برقم ال Operation إذا ستضطر لعمل جمل الشرط مرة أخرى .

من أجل هذا وجدت ال Delegates ،

Delegetes :

لو اردنا تعريف Delgates لمجموعة دوال ، اول ما نحتاج إليه ان تكون هذه الدوال من نفس عدد البارميترات . ايضاً لها نفس ال input وال output ، لذا سيكون ال Delegate الخاص بدوالنا بالشكل التالي :

C#:
كود PHP:
public delegate int myDelegate(int value); 
vb.net:
كود PHP:
Public Delegate Function myDelegate(ByVal value As Integer) As Integer 
والآن كل ما علي في جملي الشرطية ان احدد لهذا التفويض - إن صحت الترجمة - الدالة المسؤول عنها ، لذا ستكون شروطنا المختصرة بالشكل التالي :
C#:
كود PHP:
if (Operation == 0)

          {
              
myDelegate aDelegate = new myDelegate(ConvertDToEG);
              
result aDelegate(userInput);
          }
          else if (
Operation == 1)
          {
              
myDelegate aDelegate = new myDelegate(ConvertRSToD);
              
result aDelegate(userInput);
          } 
vb.net:
كود PHP:
If Operation 0 Then

  Dim aDelegate 
As New myDelegate(ConvertDToEG
  
result aDelegate(userInput
ElseIf 
Operation 1 Then 
  Dim aDelegate 
As New myDelegate(ConvertRSToD
  
result aDelegate(userInput
End If 
ايضا بامكانك تأخير الشرط الأخير الذي يقوم بتنفيذ ال Delegate للنهاية ، او تكرار استخدامها مرة أخرى ، حيث ان ال aDelegate قد اصبحت تعرف اي دالة تختص بتنفيذ هذه العملية الآن .

لن اتوسع كثيراً في هذا العالم ، هناك الكثير من النقاط في ال Delegates ولكني تجاوزت بعضها لعدم الحاجة المتكررة إليها ، فيما تجاوزت نقاط أخرى لإني لم استطع فهمها بطريقة كاملة تجعلني استطيع شرحها .

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


توقيع : khaledbelal



(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}).
سورة الأعراف.

رد مع اقتباس