تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس الثاني والثلاثون - ال Delegates
#1
كاتب الموضوع : أحمد جمال

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

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

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

لنفترض عدة دوال تستقبل int وتعيد int ايضاً خاصة بعمليات التحويل ، وهي على الشكل التالي :
C#:

كود :
[FONT=Tahoma]public int ConvertEGToD(int EG)[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]return EG * 5.45;[/FONT]
[FONT=Tahoma]}[/FONT]
[FONT=Tahoma]public int ConvertRSToD(int RS)[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]return RS * 3.75;[/FONT]
[FONT=Tahoma]}[/FONT]

[FONT=Tahoma]public int ConvertEGToRS(int EG)[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]return EG * 1.45;[/FONT]
[FONT=Tahoma]}[/FONT]
[FONT=Tahoma]public int ConvertDToRS(int D)[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]return D * 3.75;[/FONT]
[FONT=Tahoma]}[/FONT]
[FONT=Tahoma]public int ConvertDToEG(int D)[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]return D / 5.45;[/FONT]
[FONT=Tahoma]}[/FONT]

[FONT=Tahoma]public int ConvertRSToEG(int RS)[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]return RS / 1.45;[/FONT]
[FONT=Tahoma]}[/FONT]
vb.net:

كود :
[FONT=Tahoma]Public Function ConvertEGToD(ByVal EG As Integer) As Integer [/FONT]
[FONT=Tahoma]Return EG * 5.45 [/FONT]
[FONT=Tahoma]End Function [/FONT]
[FONT=Tahoma]Public Function ConvertRSToD(ByVal RS As Integer) As Integer [/FONT]
[FONT=Tahoma]Return RS * 3.75 [/FONT]
[FONT=Tahoma]End Function [/FONT]

[FONT=Tahoma]Public Function ConvertEGToRS(ByVal EG As Integer) As Integer [/FONT]
[FONT=Tahoma]Return EG * 1.45 [/FONT]
[FONT=Tahoma]End Function [/FONT]
[FONT=Tahoma]Public Function ConvertDToRS(ByVal D As Integer) As Integer [/FONT]
[FONT=Tahoma]Return D * 3.75 [/FONT]
[FONT=Tahoma]End Function [/FONT]
[FONT=Tahoma]Public Function ConvertDToEG(ByVal D As Integer) As Integer [/FONT]
[FONT=Tahoma]Return D / 5.45 [/FONT]
[FONT=Tahoma]End Function [/FONT]

[FONT=Tahoma]Public Function ConvertRSToEG(ByVal RS As Integer) As Integer [/FONT]
[FONT=Tahoma]Return RS / 1.45 [/FONT]
[FONT=Tahoma]End Function [/FONT]
كما لاحظت فعلاً ، فهي عدة دوال تستخدم للتحويلات المختلفة بين ثلاث عملات ، الجنية المصري والريال السعودي والدولار الأمريكي .
طبعاً يمكننا عملهم في دالة واحدة وارسال متغير يمثل رقم التحويل ، لكننا لن نستطيع عمل ذلك مثلاً مع دوال اكبر ومختلفة ، لذا فهذا المثال للتوضيح .
الآن في برنامجنا سنقرأ البيانات من المستخدم ، ومن ثم نستخدم جملة شرط if او switch لتحديد اي دالة سنقوم بارسال البيانات إليها ، هذا مختصر للكود المكتوب :
C#:

كود :
if (Operation == 0)

كود :
[FONT=Tahoma] result = ConvertDToEG(userInput);[/FONT]
[FONT=Tahoma]else if(Operation == 1)[/FONT]
[FONT=Tahoma]result = ConvertRSToD(userInput);[/FONT]
vb.net:

كود :
If Operation = 0 Then

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

من أجل هذا وجدت ال Delegates ، وهي ما سنتعرف عليها في الجزء القادم من هذا الدرس .
}}}}
تم الشكر بواسطة:
#2
Delegetes :

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

C#:

كود :
public delegate int myDelegate(int value);


vb.net:

كود :
Public Delegate Function myDelegate(ByVal value As Integer) As Integer

والآن كل ما علي في جملي الشرطية ان احدد لهذا التفويض - إن صحت الترجمة - الدالة المسؤول عنها ، لذا ستكون شروطنا المختصرة بالشكل التالي :
C#:

كود :
if (Operation == 0)

كود :
[FONT=Tahoma] {[/FONT]
[FONT=Tahoma]myDelegate aDelegate = new myDelegate(ConvertDToEG);[/FONT]
[FONT=Tahoma]result = aDelegate(userInput);[/FONT]
[FONT=Tahoma]}[/FONT]
[FONT=Tahoma]else if (Operation == 1)[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]myDelegate aDelegate = new myDelegate(ConvertRSToD);[/FONT]
[FONT=Tahoma]result = aDelegate(userInput);[/FONT]
[FONT=Tahoma]}[/FONT]
vb.net:


كود :
If Operation = 0 Then

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

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

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الأول : تحميل .net 2008 ومميزات استخدامه oneyemenweb2 1 671 07-03-13, 02:04 AM
آخر رد: abdoojh
  اعلان - انتهاء الدورة - الدرس التاسع والسبعون -) RaggiTech 0 602 14-10-12, 11:23 PM
آخر رد: RaggiTech
  الدرس الثامن والسبعون - Ajax RaggiTech 2 875 14-10-12, 11:22 PM
آخر رد: RaggiTech
  الدرس السابع والسبعون - ASP.net وقواعد البيانات RaggiTech 2 910 14-10-12, 11:19 PM
آخر رد: RaggiTech
  الدرس السادس والسبعون - ASP.net - الجزء الثالث RaggiTech 7 1,162 14-10-12, 11:14 PM
آخر رد: RaggiTech
  الدرس الخامس والسبعون - ASP.net - الجزء الثاني RaggiTech 5 1,317 14-10-12, 11:07 PM
آخر رد: RaggiTech
  الدرس الرابع والسبعون - ASP.net RaggiTech 6 1,091 14-10-12, 10:58 PM
آخر رد: RaggiTech
  الدرس الثالث والسبعون - مقدمة إلى تطوير المواقع RaggiTech 4 850 14-10-12, 10:44 PM
آخر رد: RaggiTech
  الدرس الثاني والسبعون - مقدمة إلى Mono RaggiTech 0 596 14-10-12, 10:37 PM
آخر رد: RaggiTech
  الدرس الواحد والسبعون - XML Commenting RaggiTech 2 794 14-10-12, 10:35 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم