تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 2 از 2

نام تاپيک: تفاوت بین Delegate و Event در سی شارپ چیست؟

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    13 تفاوت بین Delegate و Event در سی شارپ چیست؟

    با سلام و درود و خسته نباشید
    دوستان من یک تستی میکردم و داشتم بحث Delegate مرور میکردم بعد که رفتم سراغ Event دیدم همان کار رو که باید Delegate هم میتونستم انجام بدم. پس مزیت و معایب و تفاوت این دو چیست؟

    مثلا قطعه کد ساده زیر رو نوشتم و در مثال زیر کاری که دیدم بیشتر با Event انجام میدهند الان با Delegate انجام دادم. و ما میتونیم یک event رو به راحتی با as به delegate تبدیل و همان استفاده رو ازش ببریم.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    Last edited by Life24; 28-03-2018 at 03:58.

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    پیش از این در تاپیک دیگری کمی به بحث 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 خیلی مرسوم است)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  3. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •