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

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




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

نام تاپيک: delegate

  1. #1
    داره خودمونی میشه
    تاريخ عضويت
    Aug 2009
    پست ها
    43

    پيش فرض delegate

    دوستان می خوام درباره delegate یاد بگیرم ممنون میشم راهنمایی کنید

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

    پيش فرض

    سلام
    delegate ها اشاره گر توابع هستند.
    یعنی آدرس شروع کدهای تابع را در RAM در خودش دارد.
    در واقع میتوانید با delegate یک تابع را جابه جا کنید.

    وقت توضیح کاملتر ندارم و به نظرم کد ساده نمونه زیر گویا است:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    دقت کنید که تابع Run یک اشاره گر تابع میگیرید و آن را در داخل خودش اجرا میکند ...
    تابع F1 و F2 هم دو نمونه تابع مطابق الگوی امضای دیجیتال Name1 است که اشاره گرشان میتواند در متغییری از Name1 جا شود و یا منتقل شود.

    موفق باشید.

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


  4. #3
    آخر فروم باز Mehran NZ's Avatar
    تاريخ عضويت
    Sep 2006
    پست ها
    2,208

    پيش فرض

    سلام
    بخوام به زبان ساده بگم delegate رو شما می تونید یک نوع کلاس در نظر بگیرید که فانکشنهایی که در یک کلاس هست(حالا هر تابعی در هر کلاسی که شکلش شبیه delegat ی هست که تعریف کردین) رو به آبجکتهایی که ازش ساخته می شن منتقل می کنه و دقت کنید که اون آبجکتها خودشون مثل فانکشن برخورد می کنن پس نمی شه گفت دقیقا مثل یک شی معمولی هستن!
    اینم نمونه کد مثلا من می خوام تابع MyFunc که در کلاس Mehran وجود داره رو به تابع DelegatObj منتقل کنم و منظور از منتقل کردن این هست که دقیقا همون کار و برامون انجام بده :
    توجه داشته باشید که public delegate void MehranDelegate(int x); مقدار void رو بر می گردونه و int می گیره و MyFunc هم دقیقا همین کار و می کنه که در غیر اینصورت نمی شد اینا دو تا رو به هم ربط داد!
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    خوب حالا این یک نوع اضافه کردن یک تابع به یک delegate بود راه دیگش اینه که چندین تابع رو به یک delegate اضافه کنیم یعنی با یک delegate چند تابع یکجا اجرا بشن به این صورت:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    حالا می خوایم ببینیم که اصلا Delegate ها اصولا به چه دردی می خورن و چرا باید همچین کارهایی انجام بدیم!
    ما از delegate ها برای ساخت event ها استفاده می کنیم این به این معنی هست که وقتی یک event اتفاق می افته این کار باید باعث بشه که یه تابعی از یه جایی اجرا بشه همون طور که خیلی راحت می شه حدس زد این تابع (یا تابعها) دقیقا همونی هستش که ما قبلا توی delegate رجیسترش کردیم!
    مثلا فرض کنید یک جمله if در فلان کلاس اجرا شده و ما می خوایم با این کار یک تابع در یک کلاس دیگه اجرا بشه اینجاست که اون تابع رو در delegate قرار می دیم و یک Event از delegate درست می کنیم پس هر وقت که event اتفاق بیافته اون تابع اجرا می شه!
    قبل از اینکه مثالی رو بیارم باید چند نکته جزئی رو بگم اول این که یک event باید حتما در یه کلاس ساخته بشه و کلا بصورت زیر ساخته می شه!
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    یک event رو هم باید مثل همون توابع یه دیلیگیت مربوطه اضافه کرد(این موضوع در مثال کاملا روشن می شه اگه الان نفهمیدین مشکلی نیست)

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

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    مثال بعدی هم همون قبلیه که فقط بجای اجرای یک تابع با یه event دو تابع با هم اجرا می شن(فکر کنم دیگه این و راحت خودتون بنویسید):
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و نکته آخری که به ذهنم می رسه اینه که Visual Studio سر درست کردن event گیر میده که دکمه Tab رو بزنید تا خودش تابع فراخواننده event رو اجرا کنه در این صورت دیگه نیازی نیست تابعی رو به delegate نسبت بدیم می شه اینطوری(توجه کنید هیچ تابعی توی delegate رجیستر نشده پس دیگه به کلاس EventCatcher هم نیازی نیست):
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    Last edited by Mehran NZ; 04-04-2010 at 03:28.

  5. 4 کاربر از Mehran NZ بخاطر این مطلب مفید تشکر کرده اند


  6. #4
    آخر فروم باز Mehran NZ's Avatar
    تاريخ عضويت
    Sep 2006
    پست ها
    2,208

    پيش فرض

    خوب دوستان من نصف شبی زد به سرم و یه چیز درست و درمونی در موردش نوشتم و پستم و ادیت کردم باشد که بدرد یکی بخورد !
    اساتید اگه نکته ای چیزی جا مونده یا اشتباهی جایی هست بفرمایید ما هم استفاده کنیم
    آزاد باشید

Thread Information

Users Browsing this Thread

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

User Tag List

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

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

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