سلام مجدد
اجازه دهید تعریف EventHandler را ببینیم.
خود EventHandler با خطی مشابه این قابل تعریف است:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ظاهرش کمی پیچیده شد! ولی دلیلش وجود آرگومان جنریکی T است. (همانکه شما بعداً با CarEventArgs پرش کرده بودید.)
delegate های ظرف هایی (با ماهیت ارجاعی class) هستند که میتوانند محل یا آدرس یک تابع را در خود نگهداری کنند.
شما فرض کنید یک ظرف برای جادادن یک تابع/متد هستند!
یعنی با delegate میتوانید آدرس یک تابع را نگهداری کنید.
اجازه دهید یک delegate دستی و سفارشی تعریف کنیم.
(در واقع میخواهم بگویم مجبور به استفاده از EventHandler نیستیم!)
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا یک TYPE (نوع متغییر) با نام MyDelegate داریم که میتواند هر تابعی که امضای void-int-string را دارد در خود نگهداری کند.
چطور از MyDelegate استفاده کنیم؟
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
الان آدرس Func1 در x است
و آدرس Func2 در y است.
دقت کنید در زمان پرکردن آدرس بعد Func1 و Func2 پرانتز قرار نداده ایم.
در واقع تایپ دستور (...)Func1 یعنی تابع اجرا شود
و
تایپ Func1 تنها و بدون پرانتز یعنی بجای اجرا، آدرس تابع در RAM اخذ شود ودرنهایت اشاره گری به "کد" خواهیم داشت.
ما اغلب به اشاره گر به "داده ها" عادت داریم و استفاده میکنیم ولی اینجا با اشاره گری به "کد" طرف هستیم.
(کجایند کسانی که میگویند سی شارپ اشاره گر ندارد؟ آیا اشاره گر فقط اگر * داشته باشد، قبول است؟!!)
خوب حالا چطور باید از x و y استفاده کنیم؟
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
از نوع MyDelegate میتوانیم مانند سایر انواع TYPE ها استفاده کنید.
متغییر MyDelegate میتواند بارها پر و خالی شود...
متغییر MyDelegate میتواند آرایه باشد...
خود MyDelegate میتواند ورودی یا خروجی یک تابع دیگر باشد!
و...
و...
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یا
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
==============
حالا اگر ما یک آرایه یا فهرست (List) شامل delegate ها داشته باشیم چه میشود؟
شبیه همان متغییر func_array در مثال بالا...
منظورم آن است که چه استفاده دیگری میتوان از این List کرد؟؟؟
نظرتان در مورد این کد چیست؟
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چقدر کدش آشنا است ! نظرتان در مورد کد فوق چیست؟ آیا با توضیحات قبلی کد فوق را متوجه میشوید؟
یک event در واقع یک List از delegate است (اجازه دهید عمیق تر نرویم ولی شما میتوانید چنین فرض کنید و فرض دور از واقعیتی نیست) که با اپراتور =+ میتوان در آن AddHandler کرد و با =- هم میتوان در آن RemoveHandler کرد.
(کدهای فوق در notepad نوشته شده و کامپایل نشده، احتمال دارد از نظر املاء و بزرگی وکوچکی حروف و نگارش و... حرفی و سمیکالنی و... پس و پیش شده باشد ...)
شب خوش.