تبلیغات
مرجع تخصصی برنامه نویسی و انجام پروژه - آشنایی با Delegate
 
درباره وبلاگ




مدیر وبلاگ : حمید ف
پیوندهای روزانه
نویسندگان
نظرسنجی
کدام مقطع تحصیلی میباشید؟







آمار وبلاگ
  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :

مرجع تخصصی برنامه نویسی و انجام پروژه
صفحه نخست             تماس با مدیر           پست الکترونیک               RSS                  ATOM
جمعه 23 تیر 1391 :: نویسنده : محسن

Delegates در سی شارپ روشی مطمئن و typesafe را برای بکار گیری مفهوم function pointer ارائه می دهند. یکی از ابتدایی ترین استفاده های function pointers پیاده سازی callback می باشد. اما در ابتدا لازم است تا با اصول اولیه ی کاری آن آشنا شویم.
http://www.my-programming.com/wp-content/uploads/2011/10/C_Sharp.png


در صورت تمایل, به ادامه مطلب مراجعه فرمایید.

اگه با سی پلاس پلاسی کار کرده باشید احتمالا با اشاره گر به توابع آشنایی دارید یا همون Function pointer كه توی سی شارپ delegate مفهوم مشابهی رو پیاده سازی می کنه . ما خیلی راحت توی برنامه هایی که تا حالا می نوشتیم یک سری متغییر ، آرایه و.. رو به عنوان آرگومان به توابع ارسال می کردیم ولی بعضی مواقع لازمه که یک تابع به عنوان آرگومان به یک تابع دیگه ارسال بشه . ممکنه بپرسید چرا همچین کاری نیاز بشه . مثلا فرض کنید قصد دارین تابع مرتب سازی حبابی رو به صورت صعودی و نزولی بنویسید ، خوب می تونید دو تابع جدا یکی برای مرتب سازی صعودی و یک تابع برای مرتب سازی نزولی جدا از هم بنویسید ، ولی با استفاده از delegate می توانیم این کار را با یک تابع منفرد انجام دهیم و برای این کار باید عمل مقایسه رو برای صعودی و نزولی بودن به عنوان آرگومان به این delegateپاس دهیم . البته delegate كارایی های دیگه های هم بر همین مبنا داره که به مرور زمان باهاشون آشنا میشید .برای تعریف یک delegate و استفاده از آن بیاد مراحل زیر را طی کنیم:
1- اقدام به تعریف کلاس Delegate می کنیم:

;(public delegate void MyDelegate(int n
معنی عبارت فوق این است که ما می خواهیم یک کلاس Delegate تعریف کنیم که اشیاء آن بتوانند توابعی را در داخل خود ثبت کنند که پارامتر ورودی آنها یک عدد صحیح (int n) بوده و پارامتر خروجی (void) نداشته باشند.

برای روشن شدن مطلب کلاسی به نام Employee و به شکل ذیل تعریف می نماییم:

public class Employee
 {
  public int Age;
  public string FullName;

  public Employee(string fullName, int age)
  {
   Age = age;
   FullName = fullName;
  }

  public void DoIt(int n)
  {
   System.Console.WriteLine("I'm " + FullName + ", I did it " + n + " times .");
  }

همانگونه که مشاهده می کنید، ما به طور عمده در این کلاس تابعی تعریف کرده‌ایم (DoIt) که پارامترهای ورودی و خروجی آن با آنچه که در تعریف Delegate عنوان گردیده است، مطابقت داشته باشد.

2-در این مرحله نسبت به ایجاد یک شی‌ء از کلاس MyDelegate اقدام می کنیم:

MyDelegate DelegateInstance;

در این دستور، ما یک شی به نام DelegateInstance از کلاس (MyDelegate) تعریف نموده ایم.

حال برای ادامه مسیر، از کلاس Employee یک شیء به نام oEmployee به شکل ذیل ایجاد می کنیم:

Employee oEmployee = new Employee("Dariush Tasdighi", 33);

3-در این مرحله تنها کافی است که تابع(متد) DoIt شیء oEmployee را در شیء DelegateInstance به شکلی که در ذیل ذکر گردیده است ثبت نماییم:

;(DelegateInstance = new MyDelegate(oEmployee.DoIt

و اما در مرحله چهارم(مرحله آخر):

در این مرحله با صدا زدن(Call) شیء DelegateInstance همراه با یک پارامتر عددی، تابع ثبت شده در داخل آن به همان پارامتر عددی مشخص شده اجرا می‌شود. دقت کنید که در این مثال تنها یک تابع ثبت شده در داخل شیء Delegate وجود دارد.

;(DelegateInstance(5

دست نگه دارید!، باور کنید که عقل خود را از دست نداده‌ایم!!کاملا واضح است که به راحتی می توانستیم پس از ایجاد شیء oEmployee با اجرا کردن تابع DoIt همراه با همان پارامتر عددی، به همان نتیجه نائل آییم.ولی دقت کنید که همیشه این چهار مرحله به این شکلی که در اینجا مطرح گردیده است در کنار هم قرار نمی‌گیرند. نکته جالبی که در این فناوری وجود دارد این است که در یک پروژه واقعی، این چهار مرحله، هر کدام در یک قسمت از برنامه تعریف و بکارگرفته می‌شود و این مساله امکانات بسیار مفید و جذابی را برای زبان برنامه نویسی سی شارپ به ارمغان می‌آورد.





نوع مطلب : سی شارپ، 
برچسب ها : تعریف دلیگیت در سی شارپ، تعریف دلیگیت، تعریف Delegate، #Delegate in C، آشنایی با Delegate،
لینک های مرتبط :


سه شنبه 29 مهر 1393 10:43 ب.ظ

من باید از شما تشکر کنم که یک مشکل بزرگ را برام حل کردید، براتون شادی و دستیابی به آرزوهاتون را آرزو می کنم.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


 
 
برچسب ها
پیوندها
آخرین مطالب