تبلیغات
پایگاه کد ها وسورس های مختلف زبان های برنامه نویسی - گذری بر Delegate ها در سی شارپ
گذری بر Delegate ها در سی شارپ | برنامه نویسی کاربردی ,

با سلام خدمت تمامی بینندگان محترم و گرامی این وبلاگ !

آقا امروز می خواهم یه گذر ساده و راحت بر روی دلگیت ها داشته باشیم و کاربرد اون ها رو بیان کنیم و چند تا مثال کاربردی رو به همین شکل با هم مرور کنیم !

ما بار ها و بارها در دنیای بی همتا برنامه ننویسی این جمله قصار رو شندیه ام که :

"تمامی زبان های تحت دات نت چون یک کامپایر دارند دارای یک قدرتند هیچ فرقی بین آن ها نیست !"

بعد از آن هم دیده ایم که هزاران نفر تایید می کنند و می گن  هیچ فرقی نمی کنه ! ما هم از خدا بی خبر میگیم آره دیگه و دوباره تو یه جای دیگه میشینیم این حرف رو می زنیم و یه سری فرد بی سواد که اکثرشون از برنامه نویسی فقط افه  و تقلیدش رو بلندند هم عین یک خر سرشون رو می امدازند پایین و تایید می کنن ! {بی ادبی  نشه ولی این عده حیف روشون اسم این حیوان محترم رو بذاریم !}

آقا زیاد از بحث خارج نشیم که یهوو موردی پیش نیاد ! اصلا ما رو چه به این افراد معلوم الحال ! خوب آقا بریم سر بحث شیرین و جالب و باغلوای برنامه نویسی ! از حرف های بالا حتما فهمیدید که می خواهم بگم که زبان های دات نت با اینکه در کامپایل یک برنامه  عادی میشن ولی در کل زمین تا آسمون فرق دارن ! در اصل کلوم کار ما انجام میشه ولی در بعضی از زبان ها شیرین تر و در بعضی دیگه به سختی تر !!!! یکی از ویژگی هایی که در زبان سی شارپ به عنوان یک امتیاز مثبت و یک صفت خوب تلقی میشه دلگیت هاست ! {آقا لطفا به این طوری تایپ کردن ایراد وارد نفرمایید دیگه مجبورم !!}  حالا این چیه و به چه درد می خوره و ... رو یک خط پایین تر می گم : ->

برای این که افرادی که از زبان های برنامه نویسی دیگه میان و حال و حوصله حاشیه رفتن و بحث های ابتدایی رو ندارن بگم که دلگیت یعنی یه اشاره گر !! به همین سادگی !! چه طوری باید از این اشاره گر استفاده کرد یا اون رو تعریف کرد در پارگراف زیری نه پارگراف بعدیش میگم !!

اما یه تعریف هم برای افراد تازه کاری که سی شارپ اولین زبان برنامه نویسی شون هست ! بزارین یه مثال بزنم ! آقا شما حتما اینو می دنید که یک پراپرتی یک فیلد هوشمند و کارا می باشد ! دلگیت هم یک متد هوشمند می باشد ! اما چه جوری !؟ خوب برای این که بهتر رووشن تون کنم یه تعریف کلی و اجمالی از دلگیت می کنیم : دلگیت عبارت است از  یک اجرا گر متد ! باز بخوام واضح تر بگم : دلگیت یعنی غالب یک متد بدون بدنه که بدنه این متد ها را شما براش آماده می کنید ! اونم به هر تعداد که بخواهید ! از تعریف بالا می توان به این شکل استباط کرد که یک متد داشته باشیم که مقدار بازگشتی اش و پارامتر هاایش معلوم باشد ولی بدنه و دستورات آن معلوم نباشد ! اما حالا این بدنه که اصل کاری است رو  باید چه کنیم ؟ خیلی سادس این بخش رو برای کاربر  آزاد می ذاریم ! یعنی به کاربرمون می گیم که توو بیا و یه متد بنویس با این پارمتر ها و این مقدار بازگشتی و سپس اونو در  یک شی دلگیت رجیستر کن ! حالا این دلگیت می دونه که هر وقت هر جا خواست این پارامتر ها رو پاس بده ! اما خوب بذارین  یکم از تعاریف جدا شیم و با کد ها موضوع را بیان کنیم ! اگه آموزش توابع و اشاره گر های بخش دلفی رو بخونید می بینید که در ای پی ای انوم چایلد ویندوز  این امکان رو به مت میده که ما با  هندل پنجره های فرزند یک پنجره اصلی هر کاری بخواهیم بکنیم ! مثلا کلاسشون رو محاسبه کنمی ویا کپشن اون ها و ... ولی در پارامتر های ورودی این تابع هیچ اثری از یک  پارمتر که به ما هندل بده نبود ! بلکه به ما اجازه داده بود تا یک تابع با مقدار بازگشتی و پارمتر های معلوم بنویسیم  و اونو به به صورت یک اشاره گر پاس بدیم ! به زبون خودمونی میگه که کار از تو هندل و پارمتر پاس دادن از من ! خوب حالا این دلگیت هم دقیقا می گه متن تابع از تو پاس دادن مقدار ها یه جای دیگه از من !

اما خوب حالا که یک دلگیت رو بیشتر شناختمی بهتره روش کار با اون رو بیان کنیم ! خوب  طبعا با توجه به توضیحات بالا ما باید یک شکل از قالب یک تابع بودن بدنه رو داشته باشیم اما برای این کار باید چه کنیم ؟ باید یک دلگیت بنویسیم  به این غالب که :

{public|private} delegate {your_return_typ} Your_delegate_name({Your_Prametr})

خب همانطور که میبینید ما از یک غالب ساده که بسیار شبیه به یک متد می باشد استفاده کردیم فقط با این فرق که در ابتدای آن از کلمه کلیدی دلگیت استفاده کردیم ! فقط توجه داشته باشین دلگیت یک نوع جدا از کلاسو یا استرکچر یا اینتر فیس میباشد لذا بای خارج از محیط کلاستون اونو تعریف کنید !

برای مثال یک دلگیت که یک رشته میگیره و هیچ مقداری بر نمی گردونه به این شکله :

public delegate void MyDelegate(string str);

خب حالا برای استفاده از این دلگیت ما باید یک متغیر از آن بسازیم :

MyDelegate mydeg;

و برای مهم ترین قسمت کار یعنی ثبت متد  و یا متد ها باید کار زیر رو انجام داد :

ابتدا یک متد باید به همون مشحصات دلگیت تعریف کنیم به این شکل که از اهمون پارامتر هم استفاده می کنیم ! برای یک مثال ساده ما به این شکل از اون استفاده می کنیم !

public void test(string a)
{
 Console.WriteLine("Iam {0} From Iran",a);
}

خب تا این جای کار که خیلی ساده بوده اما از اینجا به بعد ساده تر هم میشه ! تنها کاری که مونده اینه که به این جناب دلگیت بگیم که  ما این متد رو به تو میدیم به این شکل :

mydeg=new MyDelegate(test);

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

mydeg("Vahid");

خب حتما الان دارین به من قش قش می خندین و می گین که طرفمون دیوونه س خدا شفاش بده !! اما اشتباه نکنین ! درسته که منم می تونستم خیل ساده همون متد رو به کار ببرم و بهش همون پارامتر ور پاس بدم اما همیشه کار به این شکل نیست ! بهتر بگم هیچ وقت کار به این شکل نخواهد بود ! میگی چرا الان بهتون می گم : ببینید در یک دلگیت ما می تونیم بی نهایت متد به همون غالب معرفی کنیم و در نهایت اجراش کنیم ! بذارین روشن تر تون کنم !  الان من برای همون دلگیت یک متد دیگه می نویسم با همون غالب به این شکل که :

public void test2t (string va)
{
 Console.WriteLine("Iam {0} , I am not from German",va);
}

خب حالا اگه من به همون متغیر دلگیت مون من این متد رو نیز اضافه کنم :


mydeg+=new MyDelegate(test2t);

و در نهایت مثل بالا اونو صدا بزنم :

mydeg("vahid");


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

۱- فرض کنین دارین یه برنامه واسه یه شرکت می ننویسین که قراره تون اون با وارد شدن یک مقدار به دیتا بیس هم زمان یک ایمیل برای یک فرد فرستاده بشه یک مقدار در دیتابیس ذخیره بشه یک صحه با توجه به ورودی پرینت گرفته بشه ! خوب اگه دقت کرده باشین همه این متدها یک شکل پارامتر می خواهند و همه خروجی ندارند ! خوب حالا می توان یک دلگیت نوشته  سپس یک شی از آن ساخت و این متد هارا به آن متغیر اضافه کرد و در نهایت هر جا که خواستیم به متغیر دلگیت مقدار ها رو پاس بدیم می بینید که نتیجه شیرین تر و دلچسب تر از هر چیزی خواهد بود !

۲- اصلا اگه بالا شما رو متقاعد نکرد هیچ ! به این کیک مثال توجه کنین ! فرض کنین دارین یه برنامه تحت شبکه می نویسید که در اون یه متد می نویسید ! حتما می خواهید برای اون یه رخداد بنویسید که به طور مثال هر وقت فلان پیام رسید یه کاری انجام شه ! حتما می دنید که در ایونت ها کاربر یه متد باید پاس بده شما کافیه یه شی دلگیت بنویسید ! ویک یک ایونت از اون شی دلگیت بسازید ! بله درست فرک کردید شما با دلگیت ها قادرید  ایونت های شخصی خودتون رو بنویسید ! اما چه طوریش رو بزاریم واسه جلسه بعدی !!

خب حتما دیگه فهمیدی کار دلگیت چیه و واقعا چه قدر برای برنامه نویس کاربرد داره !! همچنین روش کار با اون ها رو یاد گرفتید !

راستی تا یادم نرفته اینم بگم که متد های استاتیک هم قابل رجیستر در یک متغیر از یک دلگیت هستند ! خوب یگه واقعا خسته شدم ! امیدوارم بدردتون خورده باشه !

حتما مار واز نظر ها و انتقادات و پیشنهادات خودتون بی نصیب نذارید !


نوشته شده توسط دایرکتور در سه شنبه 25 مرداد 1384 و ساعت 09:08 ق.ظ
نوشته های پیشین
+ معرفی سرویس جدید پارسی باکس+ فراخوان دعوت به همکاری+ بازم شروعی دوباره !!!+ شروعی دوباره ؟؟؟؟؟+ الگوریتم های فشرده سازی+ .........+ گذری بر Delegate ها در سی شارپ+ کار با دیتا بیس ۲ + ارتباط با دیتا بیس ..... + افزودن یک ایتم منو به فلش پلیر+ عذر خواهی وکوکی+ پروسس ها در دات نت+ تغییر آدرس وبلاگ + اشاره گر ها و توابع + آموزش ASP.NET شماره ۱

صفحات: