امتیاز موضوع:
  • 2 رأی - میانگین امتیازات: 3
  • 1
  • 2
  • 3
  • 4
  • 5
Delegate ها - هم سوال هست هم آموزش
نویسنده پیام
computer_prospect آفلاین
كاربر دو ستاره
**

ارسال‌ها: 95
موضوع‌ها: 39
تاریخ عضویت: شهریور ۱۳۸۷

تشکرها : 53
( 80 تشکر در 59 ارسال )
ارسال: #1
Exclamation  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;
خب دوستان شايد خسته شده باشيد از اين همه نوشته اما مطمئنا مفيد واقع شده - اميدوارم تمام شما به سادگي چشم بر هم گذاشتن پله هاي پيشرفت را طي كنيد . با آرزوي موفقيت براي تمام شما .
منتظر پاسخ هاي بي نظير شما هستم .
پيشاپيش از شما بزرگواران سپاسگزارم .


فایل‌(های) پیوست شده
.rar   4 Programs.rar (اندازه: 64.37 KB / تعداد دفعات دریافت: 53)

[تصویر:  M-H.jpg?sizeM=3]
IF Having Life Ctrl + Z . Oh My God . Only Love Can Break My Heart ! Help Me . That's All I'm Dreaming of Let's Talk About Love
دوستان محترم لطفا برای تشکر فقط بر روی دکمه تشکر کلیک کنید نه چیز دیگر ممنون
(آخرین ویرایش در این ارسال: ۰۲-تير-۱۳۸۸, ۱۰:۱۱:۴۹، توسط computer_prospect.)
۰۲-تير-۱۳۸۸, ۱۰:۰۸:۰۵
ارسال‌ها
پاسخ
تشکر شده توسط : sokote_cheshm, sita_rampail
ajlajlajl آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,192
موضوع‌ها: 70
تاریخ عضویت: مهر ۱۳۸۴

تشکرها : 932
( 2618 تشکر در 1020 ارسال )
ارسال: #2
RE: Delegate ها - هم سوال هست هم آموزش
اگه توی جوابام اشتباهی هست ببخشید. قبلا گفتم من C# کار نیستم.
به نظر من delegate ها جایگزین اشاره گر به توابع در زبان C++ هستن. همچنین ارایه اشاره گر به توابع.
1- خب وقتی تابع صدا زده میشه باید آدرس اون یکی تابع به عنوان پارامتر براش ارسال بشه. ما توی VB با addressof این کارو میکنیم و توی C# مثل این که اونجوری.
منظورتونو از کدی که زیرش نوشتید نفهمیدم.
2- نمیدونم. احتمالا اشتباهی نوشتن.
3- فرقی نداره زیاد. Readonly هم برای متغیر delegate1 هسته و نه برای delegate . یعنی ثابت تعریف کرده.
4- خب یه delegate میتونه بیشتر از یکی تابع رو نگه داره و صدا بزنه. و توی C# با همون + و - معمولی میتونید آدرس تابع بهش اضافه و کم کنید.

بابا اینقدر تعارف نکنید. محیط باید دوستانه باشه ( اوج محیط دوستانه وقتیه که به هم فحش میدن Biggrin )

میزان رای دشمن است!
[تصویر:  cff100.png]
۰۲-تير-۱۳۸۸, ۲۰:۲۵:۱۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : computer_prospect
computer_prospect آفلاین
كاربر دو ستاره
**

ارسال‌ها: 95
موضوع‌ها: 39
تاریخ عضویت: شهریور ۱۳۸۷

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

[تصویر:  M-H.jpg?sizeM=3]
IF Having Life Ctrl + Z . Oh My God . Only Love Can Break My Heart ! Help Me . That's All I'm Dreaming of Let's Talk About Love
دوستان محترم لطفا برای تشکر فقط بر روی دکمه تشکر کلیک کنید نه چیز دیگر ممنون
(آخرین ویرایش در این ارسال: ۰۲-تير-۱۳۸۸, ۲۳:۲۹:۲۲، توسط computer_prospect.)
۰۲-تير-۱۳۸۸, ۲۳:۲۶:۳۰
ارسال‌ها
پاسخ
تشکر شده توسط : sokote_cheshm
sokote_cheshm آفلاین
تازه وارد

ارسال‌ها: 2
موضوع‌ها: 0
تاریخ عضویت: تير ۱۳۸۸

تشکرها : 56
( 1 تشکر در 1 ارسال )
ارسال: #4
Shy  RE: Delegate ها - هم سوال هست هم آموزش
منم با نظرت موافقم .
۰۳-تير-۱۳۸۸, ۰۱:۳۶:۲۶
ارسال‌ها
پاسخ
تشکر شده توسط : computer_prospect


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS