02-25-2010, 02:37 PM
|
|
مبرمج المنتدى الادارة تكليف لا تشريف
|
|
تاريخ التسجيل: 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 D * 3.75;
}
public int ConvertDToEG(int D)
{
return D / 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 D * 3.75
End Function
Public Function ConvertDToEG(ByVal D As Integer) As Integer
Return D / 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}). سورة الأعراف.
|
|