• مقدمه

در بخش ۶۴ام از سری آموزش سی‌شارپ، در رابطه با مبحث وراثت یا همان Inheritance صحبت شد. در این بخش نیز قرار است با یکی دیگر از مفاهیم شیءگرایی با نام تعریف مجدد متد آشنا شویم که در اصطلاح برنامه‌نویسی، به آن Method Overloading می‌گویند.

  • تعریف مجدد متد

تعریف مجدد متد یا همان Method Overloading، زیر مجموعه‌ی یکی از مفاهیم بسیار مهم در شیء‌گرایی با نام Polymorphism است. شما با استفاده از تعریف مجدد متد، می‌توانید چندین نسخه از یک متد را داشته باشید و بنا بر نیاز، از یکی از آن‌ها استفاده کنید.

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

overloadCodeA

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

راحت‌ترین کار این است که یک کپی از متد فعلی خود را مجدداً در فایل موجود Paste کنید. برای آنکه تعریف دیگری از متد فعلی اضافه کنید، کافیست که یک پارامتر (آرگومان) دیگری را به این متد اضافه کنید. حال نسخه‌ی جدید را با نسخه قبلی مقایسه کنید:

overloadCodeB

کاری که ما در این قسمت انجام دادیم این بود که یک پارامتر جدید از نوع String با نام aName به آرگومان متد اضافه کردیم و بدنه متد را مطابق با نیازمان، تغییراتی را در درون آن اعمال نمودیم.

حال اگر بخواهیم که از این متد در Button خود استفاده کنیم، دقت کنید که چه اتفاقی می‌‌افتد:

overload

با اینکه دو بار متد getParty را تعریف کردیم، اما همچنان یک مورد در منوی IntelliSense موجود است. اما به انتهای پیغام ظاهر شده در کنار آن دقت کنید؛ +1 overload. یعنی یک تعریف دیگری از این تابع موجود است!

همین که این متد را انتخاب کنید و اولین پرانتز باز را قرار دهید، با گزینه‌های متفاوتی که برای این متد موجود است مواجه می‌شوید.

overload2

بین دو آیکون کوچک بالا و پایین، می‌بینید که تعداد متدها ۲ است. با استفاده از کلیدهای بالا و پایین موجود بر روی صفحه کلیدتان، می‌توانید مابین آن‌ها جابجا شوید تا آرگومان‌های هر یک را ملاحظه کنید.

هنگامی که بخواهید یک متد را مجدداً با آرگومان‌های متفاوتی تعریف کنید، می‌بایست ابتدا دقت کنید که امضای متد (شامل مقداری که متد باز می‌گرداند، نام تابع و نوع دسترسی آن) همه با هم یکسان باشند. درواقع تنها چیزی که می‌بایست تغییر کنید، آرگومان‌های تابع و بدنه آن است.

شما می‌توانید حتی یک نسخه‌ی دیگر از تابع بصورت زیر نیز داشته باشید:

public string getParty(string aName)

حال اگر مجدد از این متد استفاده کنیم، خواهیم دید که این‌بار ۳ نوع مختلف از این متد وجود دارد:

overload4