سربارگذاری متدها

سربارگذاری متدها (Method Overloading) به شما اجازه می‌دهد که دو متد با نام یکسان تعریف کنید که دارای امضاء و تعداد پارامترهای مختلف هستند. برنامه از روی آرگومانهایی که شما به متد ارسال می‌کنید به صورت خودکار تشخیص می‌دهد که کدام متد را فراخوانی کرده‌اید یا کدام متد مد نظر شماست. امضای یک متد نشان دهنده ترتیب و نوع پارامترهای آن است. به مثال زیر توجه کنید :

void MyMethod(int x, double y, string z)

که امضای متد بالا

MyMethod(int, double, string)

به این نکته توجه کنید که نوع برگشتی و نام پارامترها شامل امضای متد نمی‌شوند. در مثال زیر نمونه‌ای از سربارگذاری متدها آمده است.

  1: using System;
  2: 
  3: public class Program
  4: {
  5:     static void ShowMessage(double number)
  6:     {
  7:         Console.WriteLine("Double version of the method was called.");
  8:     }
  9: 
 10:     static void ShowMessage(int number)
 11:     {
 12:         Console.WriteLine("Integer version of the method was called.");
 13:     }
 14: 
 15:     static void Main()
 16:     {
 17:         ShowMessage(9.99);
 18:         ShowMessage(9);
 19:     }
 20: }
Double version of the method was called.
Integer version of the method was called.

در برنامه بالا دو متد با نام مشابه تعریف شده‌اند. اگر سربارگذاری متد توسط سی شارپ پشتیبانی نمی‌شد برنامه زمان زیادی برای انتخاب یک متد از بین متدهایی که فراخوانی می‌شوند لازم داشت. رازی در نوع پارامترهای متد نهفته است. کامپایلر بین دو یا چند متد همنام در صورتی فرق می‌گذارد که پارامترهای متفاوتی داشته باشند. وقتی یک متد را فراخوانی می‌کنیم، متد نوع آرگومانها را تشخیص می‌دهد.
در فراخوانی اول (خط 19) ما یک مقدار double را به متدShowMessage() ارسال کرده‌ایم در نتیجه متد ShowMessage() (خطوط 10-7) که دارای پارامتری از نوع double اجرا می‌شود. در بار دوم که متد فراخوانی می‌شود (خط 20) ما یک مقدار int را به متد ShowMessage() ارسال می‌کنیم متد ShowMessage() (خطوط 15-12) که دارای پارامتری از نوع int است اجرا می‌شود. معنای اصلی سربارگذاری متد همین است که توضیح داده شد.
هدف اصلی از سربارگذاري متدها این است که بتوان چندین متد که وظیفه یکسانی انجام می‌دهند را تعریف کرد تعداد زیادی از متدها در کلاسهای دات نت سربارگذاری می‌شوند مانند متد WriteLine() از کلاس Console. قبلاً مشاهده کردید که این متد می‌تواند یک آرگومان از نوع رشته دریافت کند و آن را نمایش دهد، و در حالت دیگر می‌تواند دو یا چند آرگومان قبول کند.