ايران ويج

نسخه‌ی کامل: Delegate ها - هم سوال هست هم آموزش
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
بازم سلام عرض مي كنم خدمت بهترين دوستانم مخصوصا ajlajlajl برادر عزيزم .
از زماني كه با دوست عزيزم ajlajlajl بيشتر آشنا شدم و از مهرباني دل او با خبر شدم به خودم واجب مي دونم ضمن عرض سلام به تمام دوستان ايران ويج ، حتما از ajlajlajl عزيزم يادي كنم و به او يك سبد سلام مخصوص تقديم كنم .
دوستان گرامي تصميم گرفتم در هر فصلي كه مباحث مهم دارد سوالاتي جامع اما روان مطرح كنم تا تمام دوستان علاقه مند به #C از آنها بهرمند شوند .
يكي از اين مباحث ، مبحث Delegate ها در #C است .
من توضيح مختصري از Delegate ها مي دهم و براي نمونه 4 برنامه مختلف و آشنا پيوست مي كنم كه از اين 4 برنامه سوالاتي مطرح مي كنم كه مي دانم هم براي خودم جالب است و هم براي شما دوستان .در ضمن هر كدام از دوستان كه سوالات بيشتري چه از اين 4 برنامه و چه از مبحث Delegate ها داشتند مي توانند مطرح كنند تا همه دوستان به كمك هم پاسخ آن ها را تهيه كنند .
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::
Delegate
ببينيد دوستان همانطور كه خود شما مي دانيد ما مي توانيم مقادير و اشياء را به عنوان پارامتر به متد ها ارسال كنيم اما نمي توانستيم متد ها را به عنوان پارامتر به متد ديگري ارسال كنيم . اما با استفاده از Delegate مي توانيم متد را به عنوان پارامتر ، به متد ديگري ارسال كنيم .
برداشت من از Delegate (حالا نمي دونم چقدر درسته ! تشخيص با شما ) اين است كه ما با تعريف Delegate در اصل داريم يك نوع جديد و دلخواه تعريف مي كنيم كه بشود به وسيله اين نوع ، متدي را به متد ديگري ارسال كنيم .
طريقه تعريف Delegate :
1) ابتدا بعد از NameSpace ها ساختار Delegate را تعريف مي كنيم ->
کد:
Modifiers Delegate My-Type My-Name ();
Modifiers = تعريف سطح دستيابي مانند : Public - Private - Protected
My-Type = نوعي است كه Delegate بر مي گرداند مانند: Void - int
My-Name = نامي است كه براي Delegate انتخاب مي كنيم .
2) سپس متدي كه پارامتري از نوع Delegate دريافت مي كند را تعريف مي كنيم .
3) تعريف متدي كه بايد براي پارامتري از نوع Delegate ارسال شود .
خب دوستان حالا كه بعضي هامون با Delegate آشنا شديم يا برامون يادآوري شد
، و با برنامه هايي كه پيوست شده چند نمونه سوال از هر برنامه مطرح مي كنم .
1) برنامه اول :
چرا فراخواني اين متد به اين صورت مي باشد ؟
کد:
Caller(new CallerDelegate(Display));
چرا به اين صورت نمي باشد ؟
کد:
CallerDelegate varDelegate ;



varDelegate = new CallerDelegate(Display);
2) برنامه دوم :
چه لزومي دارد كه ما اين كد را در برنامه دوم استفاده كنيم ؟
کد:
public static void Caller(CallerDelegate SomeMethod)


{



SomeMethod();


}
3) برنامه سوم :
تفاوت تعريف اين Delegate با برنامه هاي قبلي در چيست ؟ و منظور از readOnly چيست ؟
کد:
public static readonly delegate1 DisplayAlias = new delegate1(Display);
4) برنامه چهارم :
منظور از علامت مثبت يا منفي در اين دستور چيست ؟
کد:
multiCaster += Debugger;
خب دوستان شايد خسته شده باشيد از اين همه نوشته اما مطمئنا مفيد واقع شده - اميدوارم تمام شما به سادگي چشم بر هم گذاشتن پله هاي پيشرفت را طي كنيد . با آرزوي موفقيت براي تمام شما .
منتظر پاسخ هاي بي نظير شما هستم .
پيشاپيش از شما بزرگواران سپاسگزارم .
اگه توی جوابام اشتباهی هست ببخشید. قبلا گفتم من C# کار نیستم.
به نظر من delegate ها جایگزین اشاره گر به توابع در زبان C++ هستن. همچنین ارایه اشاره گر به توابع.
1- خب وقتی تابع صدا زده میشه باید آدرس اون یکی تابع به عنوان پارامتر براش ارسال بشه. ما توی VB با addressof این کارو میکنیم و توی C# مثل این که اونجوری.
منظورتونو از کدی که زیرش نوشتید نفهمیدم.
2- نمیدونم. احتمالا اشتباهی نوشتن.
3- فرقی نداره زیاد. Readonly هم برای متغیر delegate1 هسته و نه برای delegate . یعنی ثابت تعریف کرده.
4- خب یه delegate میتونه بیشتر از یکی تابع رو نگه داره و صدا بزنه. و توی C# با همون + و - معمولی میتونید آدرس تابع بهش اضافه و کم کنید.

بابا اینقدر تعارف نکنید. محیط باید دوستانه باشه ( اوج محیط دوستانه وقتیه که به هم فحش میدن Biggrin )
(۰۲-تير-۱۳۸۸, ۲۰:۲۵:۱۲)ajlajlajl نوشته است: [ -> ]بابا اینقدر تعارف نکنید. محیط باید دوستانه باشه ( اوج محیط دوستانه وقتیه که به هم فحش میدن Biggrin )
علي جان ممنون از اينكه پاسخ دادي .
راستي از دري كه بي احترامي و شوخي و فحش وارد مي شه ، ادب خارج مي شه . محيط دوستانه بسيار عالي هست اما به شرط اينكه در دوستان فرهنگ سازي شده باشه . من تاپيك هاي شمارو ديدم جدا دوستانه است اما بعضي از دوستان هستند از دوستي سوء استفاده مي كنند و مسير صحبت هاي علمي رو به جاده هاي توهين تغيير ميدن كه من اين رو قبول ندارم . در بعضي از كشور هاي خارج از ايران ، هر سخن رو به جا و هر كاري رو در مكان خودش انجام ميدن. همه كاريم مي كنن اما به موقع اش . از نظر من تا آدم با كسي كاملا آشنا نيست و هنوز رفيق نشده نبايد به خودش اجازه بده شوخي كنه . (سريع پسر خاله نشه) اما اين آيتم در بعضي از دوستان ديده ميشه . حرفي رو كه آدم مي تونه با احترام بگه چرا با توهين يا شوخي يا فحش بده - علي جان تعارف بهتر است از فحش و كدورت بين 2 دوست و دل شكستن .
البته اگر همه مي تونستن مثل شما محيط دوستانه اي ايجاد كنند من حال مي كردم كه با اونها راحت صحبت كنم چرا كه نه ؟
ممنون از اين كه بازم برام وقت گذاشتي .
منم با نظرت موافقم .