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

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




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

نام تاپيک: درخواست توضیح یک مثال در مورد Event ها

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

    12 درخواست توضیح یک مثال در مورد Event ها

    با سلام و درود
    دوستان امکان داره این مثال مخصوصا چند قسمت رو توضیحی بده که خوب درک کنیم؟ ممنون میشم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    ابهام اینجاست که ما در این خط داریم
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ;

    یعنی Exploded و AboutToBlow از نوع CarEventArgs هستند که یک پارامتر در سازنده میگیرد. اما در خط دیگر وقتی این متغیر را صدا زدیم ،
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    دو پارامتر فرستادیم، همان متدی که تو برنامه اصلی بهش داده شده. سوال اینجاست ما وقتی نوع داده رو انتخاب میکنیم که اینجا CarEventArgs هست، مگر Type-Safe نمی شود و ملزم به رعایت امضا اون هستیم ؟(پارامتر و نوع داده برگشتی؟) پس چطور یک تابع با مشخصات دیگر بهش داده میشه


    سوال دوم اینکه خط زیر ابهام داره ، خط های قبل رو بهتر درک کردم و قانون هاش رو فهمیدم اما منطق این رو نمیفهمم...
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ;[/FONT][/COLOR]
    [/LEFT]

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

    پيش فرض

    سلام
    نقل قول نوشته شده توسط Life24
    یعنی Exploded و AboutToBlow از نوع CarEventArgs هستند که یک پارامتر در سازنده میگیرد. اما در خط دیگر وقتی این متغیر را صدا زدیم
    زیاد درست تشریح نکردید، یا حداقل از الفاظ صحیحی استفاده نکردید...

    متغییرهای Exploded و AboutToBlow از نوع EventHandler هستند.
    خود EventHandler هم یک (کلاس) delegate است.
    گمانم کل مشکلات شما و سوالات بعدی شما از فهم ناقص مفهوم delegate ناشی میشود
    اجازه دهید نگاه دقیق تری به این مفهوم داشته باشیم.
    مطالبی در تشریح delegate تایپ میکنم و برمیگردم...
    بعد از مطالعه مجدد اگر سوال داشتید مطرح کنید.

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

    پيش فرض

    سلام مجدد

    اجازه دهید تعریف 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 نوشته شده و کامپایل نشده، احتمال دارد از نظر املاء و بزرگی وکوچکی حروف و نگارش و... حرفی و سمیکالنی و... پس و پیش شده باشد ...)
    شب خوش.

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


Thread Information

Users Browsing this Thread

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

User Tag List

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

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

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