الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

البدء مع Delegates في C Sharp

مغلق
بدأه mossa في 15 أغسطس 2005 · 8 رد · 1,820 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذا أول درس عن ال delegate بعد ما وعدتكم به.

أرجو أن يحوز على رظاكم.

وشكراُ

أرجو التفاعل

البدء مع Delegates.doc

#2

بالسنبة للملاحظة فهي غير صحيحية أبداً والتصريح يأخذ الشكل العام التالي:

;([attributes] [modifiers] delegate result-type identifier ([formal-parameters]

الـ attributes : خيارية.

الـ modifiers:

مثل: public , private ,internal,protected بالإضافة إلى الكلمة المفتاحية new.

الـ result-type:

هنا يكمن الجواب ليس بالضرورة أن تكون void. يمكن أن تكون من أي نمط.

الـ identifier: اسم الـ delgate

وأخيراً المتحولات

بالنسبة للتمرين فلم أفهم السؤال هل يمكن صياغيته بطريقة أخرى

وشكراً على المعلومات والجهد المبذول

#3

إذا كان لا يلزم أن يكون viod نوع الإعادة فكيف يمكنني الحصول على القيم المعادة إذا كانت من نوع آخر.

بالنسبة للسؤال فإن المثال الأول استدعى ال delegate مرتين

أريد منكم استدعائة مرة واحدة في نفس المخرجات

#4

تقريبا على ما أتذكر يمكنك استعادة ال Return value اذا كنت تستخدم BeginInvoke و EndInvoke فقط

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#5
ProcessBookDelegate myDelegate = new ProcessBookDelegate(PrintTitle);
PriceTotaller totaller = new PriceTotaller();
myDelegate = myDelegate + new ProcessBookDelegate(totaller.AddBookToTotal)
bookDB.ProcessPaperbackBooks(myDelegate);

بالنسبة لإمكانية إرجاع قيمة، بالطبع فهي مهمة جدا:

public delegete int GetValue()

class StrangeNumberGenerators{
	static boolean flag=true;
	public static int getRandomValue(){
  return (int)Math.random()*6;
	}
	public static int getNonRandomValue(){
  flag=!flag;
  if(flag)return 3;else return 4;
	}
	public static int getSpicificValue(){
  return 6;
	}
}

public class Game{
	public static void Main(){
  Console.Write("Let Us Play");
  GetValue valueDelegate = new GetValue(StrangeNumberGenerators.getRandomValue);
  for(int i=0;i<10;i++){
 	 printMessage(valueDelegate);
  }
  Console.Write("Let Us Play Again");
  valueDelegate = new GetValue(StrangeNumberGenerators.getNonRandomValue);
  for(int i=0;i<10;i++){
 	 printMessage(valueDelegate);
  }
  Console.Write("Let Us Play Last Time");
  valueDelegate = new GetValue(StrangeNumberGenerators.getSpicificValue);
  for(int i=0;i<10;i++){
 	 printMessage(valueDelegate);
  }

	}
	public static void printMessage(GetValue value){
  int number = value();
  switch(number){
 	 case 0: Console.Write("loss");
 	 case 1: Console.Write("at least you got something");
 	 case 2: Console.Write("nice");
 	 case 3: Console.Write("you can do better");
 	 case 4: Console.Write("are you lucky?");
 	 case 5: Console.Write("you won!!!");
  }
	}
}

جرب هذه وأخبرني بالنتائج... إن وجدت أخطاء فأصلحها،

بالتوفيق!!

#6

الحل صحيح يا أبو مازن

وشكراً على الردود وسوف أجرب وأخبرك بالنتائج

تم تعديل هذه المشاركة بواسطة mossa في 16 أغسطس 2005 في 20:20

#7

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

متشكرين جدا على هذا الجهد المبذول

لكن انا كان لي مجموعة أسئلة نظرية نفسي حد يجاوبني عليها باستيفاء

اولا - لماذا الdelegate نعتبر ها safe type

هل لأنها فقط تعتبر ref type وليست value type

ثانيا ماذا يحدث عندما انادي ال method عن طريق الdelegate او اناديها مباشرة

هل هذا فرق امني كبير

ارجو ان يشرح لي احدكم كيف يحدث ولا يعطيني مرجع لكيفية كتابة ال delegate

فانا اعرف ذلك جيدا والحمد لله

واتمنى أيضا أن يعطيني احدكم مثال لواقع او مشكلة عملية قامت بحلها ال delegate

ما عدا في ال event بالطبع

والسلام علكيم

#8

السلام عليكم

اقتباس
ملحوظة (أرجوا أن تخبروني بها):

سمعت أنه يجب عند استخدام ال Delegate متعدد الإجرائيات يجب أن يكون نوع الإعادة void. (هل هذا صحيح أم لا؟)

صحيح

فعلا ال multicast delegate يجب ان يكون نوع الاعاده void

والفائده من كون الdelegate بيكون safe type انه managed function pointer

بيكون هوه مسئول عن التعامل مع ال memory addresses

اظن حسب فكرتي عن الdelegate اهم فائده انه بيفصل تماما بين ال object اللي عمل fire لل event

وبين الobject اللي فيه الداله اللي هتعمل handle لل event

و ممكن قول تعريف بسيط لل delegate حسب تجربتي معاه

انه اسم ل function signature معين

لو فيه كلام غير صحيح في فكرتي عن الdelegate

انتظر التصحيح من الأخوه

#9

بسم الله الرحمن الرحيم

اخي الكريم موضوعك مهم جدا ارجو اكماله ونحن معك ومتابعين والكثير سوف يستفيد وان لم يستفيدوا الان سوف يستفيدوا بعد فترة لان موضوعك سوف يكون مرجع عربي مهم في الانترنت

هذا الموضوع مغلق.

مواضيع مشابهة