مشاهده نسخه کامل
: تفاوت بین Delegate و Event در سی شارپ چیست؟
با سلام و درود و خسته نباشید
دوستان من یک تستی میکردم و داشتم بحث Delegate مرور میکردم بعد که رفتم سراغ Event دیدم همان کار رو که باید Delegate هم میتونستم انجام بدم. پس مزیت و معایب و تفاوت این دو چیست؟
مثلا قطعه کد ساده زیر رو نوشتم و در مثال زیر کاری که دیدم بیشتر با Event انجام میدهند الان با Delegate انجام دادم. و ما میتونیم یک event رو به راحتی با as به delegate تبدیل و همان استفاده رو ازش ببریم.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
پیش از این در تاپیک دیگری کمی به بحث delegate و event پرداختیم.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
delegate های ظرف هایی(class) هستند که توانایی نگه داری آدرس های توابع را دارند.
event ها یک اعلانیه عمومی برای اتفاقاتی هستند که یک class میتواند آن رخداد را به بقیه اطلاع دهد.
بله، خود event ها در delegate ها استفاده میکنند.
با event شما یک اعلانیه عمومی در کلاس تان دارید که کلاس تان میتواند فلان رخداد را به دیگران اطلاع دهد.
در هر مرحله ای از عمر کلاس، میتوان به رخدادهای آن تابعی اضافه و کم کرد.
از زاویه دید دیگر event یک لایه اضافه روی یک فیلد داخلی از جنس delegate ایجاد میکند.
تا هم دسترسی به مخزن این فیلد داخلی را کنترل کند و هم اعلانیه عمومی بر وجود قابلیت کلاس در وجود یک رخداد باشد.
شاید بتوان رابطه event با delegate را از زاویه ای با property و field هم مقایسه کرد!
(مثلا از حفاظت این لایه اضافه میتوان به عدم توانایی فراخوانی delegate از خارج کلاس اشاره کرد یا دیگر از خارج کلاس نمیتوان سایر متدهای موجود در delegate را که دیگران اضافه کرده اند، کد دیگری remove کند و... در واقع امکان read مقدار delegate وجود ندارد و بجای write مستقیم هم وجود ندارد، فقط امکان add/remove هندلرها وجود دارد...)
هر event میتواند دو تابع سفارشی به نام add/remove داشته باشد.
یعنی شما در زمان اضافه کردن اشتراک جدید به این اعلانیه ها ، کدهای سفارشی خودتان را اجرا کنید...
(این اعمال سفارشی add/remove در مشتقات کلاس پایه Component و UIElement خیلی مرسوم است)
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.