
آموزش گامبهگام#C(جلسه بیست و یکم: متدهای بینام یا anonymous)
متدهای بینام یا anonympous یک راه میانبر و کم زحمتتر برای انجام وظایف Delegateها (یعنی اتصال متدها به رویدادها) هستند. با ما همراه باشید!
جلسه اول: آغاز کار با #C | جلسه ششم: namespaceها | جلسه یازدهم: اندیس گذار یا indexerها | جلسه شانزدهم: استفاده از اتریبیوتها | جلسه بیست و یکم: متدهای بینام یا anonymous |
جلسه دوم: عملگرها، نوعها و متغیرها | جلسه هفتم: مقدمهای بر کلاسهای #C | جلسه دوازدهم: ساختار یا structها | جلسه هفدهم: enumها | جلسه بیست و دوم: موضوعاتی در مورد نوع در #C |
جلسه سوم: عبارات کنترلی - گزینشی | جلسه هشتم: وراثت کلاس در #C | جلسه سیزدهم: واسط یا interfaceها | جلسه هجدهم: عملگرهای overloading | جلسه بیست و سوم: کار با نوعهای nullable |
جلسه چهارم: عبارات کنترلی - حلقهها | جلسه نهم: چندریختی | جلسه چهاردهم: مقدمهای بر delegateها و رویدادها | جلسه نوزدهم: کپسولهسازی | |
جلسه پنجم: متدها | جلسه دهم: ویژگی یا propertyها | جلسه پانزدهم: مقدمهای بر کنترل خطا یا exception | جلسه بیستم: مقدمهای بر generic collectionها |
در جلسه چهاردهم، در مورد delegateها و اینکه چگونه امکان برقراری ارتباط handlerها با رویدادها را فراهم میکنند، آموختید.
از C# v2.0 به بعد یک ویژگی جدید زبان به نام متدهای بینام یا Anonymous به وجود آمد که شبیه به Delegateها بود، اما به کد نویسی کمتری نیاز داشت. در این جلسه اهداف ما به شرح زیر هستند:
- درک مزایای متدهای بینام یا anonymous
- آموختن چگونگی پیادهسازی یک متد بینام
- پیادهسازی متدهای بینامی که از پارامترهای delegate استفاده میکنند
متدهای بینام چه مزیتی برای من دارند؟
یک متد بینام یا anonymous همانطور که از نامش مشخص است، یک متد بدون نام است. متدهای بینام همانند متدهای معمولی تعریف نمیشوند. در عوض، مستقیماً به رویدادها متصل میشوند. در ادامه یک کد نمونه از آنها خواهید دید.
برای درک مزایای متدهای بینام، باید به این توجه کنید که نسبت به استفاده از delegateها، چه تغییری در تجربه برنامهنویسی شما ایجاد میکنند.
به تمام مراحل استفاده از delegateها فکر کنید: یک Delegate تعریف میکنید، متدی با یک امضای تعریف شده توسط واسط delegate مینویسید، رویداد را بر اساس آن delegate تعریف میکنید و سپس کدی برای اتصال متد handler به Delegate مینویسید.
با در نظر گرفتن این همه کار که باید انجام شوند، تعجبی ندارد که برنامهنویسان (آنهایی که به تازگی با Delegateها در #C آشنا شدهاند) باید برای درک چگونگی عملکرد آنها دو برابر تلاش کنند.
چون میتوان یک متد بینام را مستقیماً به یک رویداد متصل کرد، پس در نتیجه میتوان چند مرحله از مراحل کار با delegateها را حذف کرد. در بخش بعدی چگونگی انجام این کار را نمایش میدهیم.
پیادهسازی یک متد بینام
در متد بینام به جای نام متد، از کلیدواژه Delegate استفاده میشود. سپس بدنه متد در ادامه آن نوشته میشود. استفاده معمول از یک متد بینام این است که آن متد به یک رویداد اختصاص داده میشود. لیست ۱-۲۱ چگونگی انجام این عمل را نشان میدهد.
مثال تابع بینام در #C
لیست ۱-۲۱. پیادهسازی یک متد بینام
کد موجود در لیست ۱-۲۱ یک Windows Forms application است. این کد به یک کنترل Button مقداردهی کرده و Text آن را به “Hello” تغییر میدهد. به syntax ترکیب (=+) مورد استفاده برای اتصال متد بینام دقت کنید.
متوجه میشوید که آن یک متد بینام است، چون از کلیدواژه delegate در آن استفاده شده است و بعد از آن بدنه متد بین آکولادها قرار گرفته است.
در واقع، شما یک متد داخل یک متد دیگر تعریف کردهاید، اما بدنه متد بینام همراه با بقیه کد اجرا نمیشود. چون شما آن را به رویداد متصل کردید، پس در نتیجه متد بینام تا زمانی که رویداد Click فراخوانی نشود، اجرا نمیشود.
وقتی برنامه را اجرا میکنید و روی کلید Hello کلیک میکنید، یک message box مشاهده میکنید که روی آن نوشته شده است “Hello” – که این پیغام به لطف متد بینام ظاهر میشود.
کد Controls.Add، کنترل button جدیدی را به پنجره اضافه میکند. بدون این کد، پنجره از حضور Button آگاه نخواهد بود و وقتی برنامه اجرا میشود button را مشاهده نخواهید کرد.
استفاده از پارامترهای Delegate در متدهای بینام
بسیاری از handlerهای رویداد باید از پارامترهای رویدادی که بر اساس آن ایجاد شدهاند، استفاده کنند. مثال قبلی از آن پارامترها استفاده نکرد، چون تعریف آنها برای آن مثال ضروری نبود و #C هم با این قضیه مشکلی ندارد. لیست ۲-۲۱ چگونگی استفاده از پارامترها (در صورت نیاز) را نشان میدهد.
لیست ۲-۲۱. استفاده از پارامترها در متدهای بینام
بخشهای بولد شده از لیست ۲-۲۱ یک کنترل Button دیگر را نشان میدهند که به کد موجود در لیست ۱-۲۱ اضافه شده است.
علاوه بر تغییر دادن متن Button، مشاهده میکنید که کلید btnGoodBye با تنظیم Left Property برای جا به جایی ۵ پیکسل به سمت راست کلید btnHello به سمت راست جا به جا شده است.
اگر این کار انجام نمیشد، آنگاه کلید btnGoodBye روی کلید btnHello قرار میگرفت و آن را میپوشاند، چون هر دو propertyهای Top و Left آن روی مقدار پیشفرض یعنی ۰ قرار داشتند.
ورای جزئیات پیادهسازی، کدی که واقعاً باید به آن توجه کنید، کد پیادهسازی متد بینام است. توجه کنید که کلیدواژه Delegate حالا دارای یک لیست پارامتر است. این لیست پارامتر باید با نوع delegate از رویدادی که متد بینام به آن متصل شده است، تطابق داشته باشد.
نوع Delegate از رویداد Click در این مثال، نوع EventHandler است که دارای امضای زیر است:
به پارامترهای EventHandler توجه کنید. حالا، نحوه تعریف شدن رویداد Click از کنترل Button به این شکل است:
توجه کنید که نوع delegate از رویداد Click در واقع نوع EventHandler است. به همین دلیل است که متد بینام به کلید btnGoodBye اختصاص داده شده است. رویداد Click در کد لیست ۲-۲۱ باید دارای پارامترهای یکسان با EventHandler delegate باشد.
خلاصه
متدهای بینام یک روش سادهسازی شده برای این است که بتوانید handlerها را به رویدادها اختصاص دهید. متدهای بینام زحمت کمتری نسبت به delegateها دارند و به رویدادی که به آن مرتبط هستند، نزدیکتر میباشند.
بسته به نیازی که در برنامه خود دارید، میتوانید تصمیم بگیرید که بهتر است متد بینام را بدون پارامتر تعریف کنید یا در صورت نیاز در آن پارامتر تعریف کنید.
منبع: C#-Station
جلسه بعد جلسه قبل
آخرین مطالب

دستور UPDATE در SQL Server برای تغییر دادههای موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفادهای ندارد را حذف کنید. برای ...

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...
دیدگاه خود را درباره این پست بنویسید