بازم سلام عرض مي كنم خدمت بهترين دوستانم مخصوصا 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;
خب دوستان شايد خسته شده باشيد از اين همه نوشته اما مطمئنا مفيد واقع شده - اميدوارم تمام شما به سادگي چشم بر هم گذاشتن پله هاي پيشرفت را طي كنيد . با آرزوي موفقيت براي تمام شما .
منتظر پاسخ هاي بي نظير شما هستم .
پيشاپيش از شما بزرگواران سپاسگزارم .