overloading متدها
نام دوره: زبان سی شارپ مقدماتی
نویسنده: علی مقدم جاه (مدرس دوره)
overloading یا چندریختی در متدها چیست؟
همانطور که در قبلا یاد گرفتید، میتوانید متد یا تابعی بنویسید که یک یا چندکار را برایتان انجام دهد؛ اما آیا این متد نوشته شده توسط شما حتما باید همیشه همان نوع خروجی و همان تعداد ورودی را داشته باشد؟
خیر، شما میتوانید از یک متد، در چندین شکل ممکن با ورودی ها و خروجیهای مختلف در کلاس خود تعریف کرده و هر زمان که شناسه آن متد را در برنامه خود فراخوانی کردید، طبق نیازتان ورودیها را برای آن ارسال کنید.
در مثال زیر ما یک متد Print بدون ورودی و بدون خروجی تعریف کردهایم:
class Math
{
public void Print()
{
Console.WriteLine('Hello");
}
}
این متد در هر زمان که فراخوانی شود، تنها کلمه Hello را چاپ میکند.
حال فرض کنید شما میخواهید در هر بار فراخوانی متد Print، با توجه به ورودیهایی که به او میدهید، جملات مخلتفی را چاپ کند.
در اینصورت میتوانید از overloading یا همان مبحث چندریختی متدها استفاده کنید.
مبحث overloading یا چندریختی متدها، این امکان را به شما میدهد که متدهای متفاوتی را با بدنههای کاملا جدا، و ورودیهای مختلف تعریف کنید.
دراینصورت هر زمان که شناسه آن متد را فراخوانی میکنید، با توجه به تعداد ورودیای که به آن متد ارسال میکنید، دستورات داخل بلاک همان متد را برایتان اجرا میکند.
برای درک راحت این موضوع، در کلاس Math چندین متد با شناسه Print تعریف میکنیم:
class Math
{
public void Print()
{
Console.WriteLine("Hello");
}
public void Print(string name)
{
Console.WriteLine("Hello\tyour name is {0}", name);
}
public void Print(string name, string family)
{
Console.WriteLine("Hello\tyour name is {0} and your family is {1}", name, family);
}
public void Print(string name, string family, int age)
{
Console.WriteLine("name: {0} and family: {1} and age: {2}", name, family, age);
}
}
همانطور که در مثال فوق مشاهده میکنید، ۴ متد با نام یا همان شناسه Print در کلاس Math ایجاد شده که همگی از نوع بدون خروجی (void) و با تعداد ورودی متفاوت هستند.
حالا زمانی که بخواهیم در برنامه خود، متد Print را فراخوانی کنیم، سیستم به ما ۴ حالت مختلف را در باکس راهنما نمایش میدهد که ما میتوانیم مطابق الگوی آن چهار شکل مختلف، دادهها را برای متد ارسال کرده و باتوجه به نوع ورودی، خروجی متفاوتی را شاهد باشیم:
Math.Print();
خروجی
Hello
Math.Print("ali");
خروجی
Hello
your name is ali
Math.Print("ali","moghadam");
خروجی
Hello
your name is ali and your family is moghadam
Math.Print("ali","moghadam",26);
خروجی
Hello
name: ali and family: moghadam and age: 26
درنتیجه، چند ریختی یا همون overloading متدها، این امکان را به شما میدهد تا در یک کلاس، چندین متد با یک نام داشته باشید و در زمان فراخوانی طبق نیازتان مقادیر را ارسال کنید.
برای این کار به چند نکته توجه کنید:
نکته ۱: سطح دسترسی متدها میتوانند باهم یکسان نباشند، یعنی یکی از متدها public و دیگری private باشد.
نکته ۲: نوع خروجی متدها میتوانند باهم یکسان نباشند، یعنی خروجی یکی از متدها int و دیگری bool باشد.
نکته ۳: تمامی متدها باید دارای یک نام (شناسه) بوده و همچنین با یک قاعده نامگذاری نوشته شده باشند. (یعنی متد اول Print و متد دوم print نباشد)
نکته ۴: تعداد ورودی متدها در مبحث چندریختی به شدت مهم بوده و هیچ دو متدی نمیتوانند دارای یک ساختار ورودی باشند. (یعنی اگر متد اول دارای دو ورودی از نوع int باشد، متد دوم نمیتواند دارای دو ورودی از نوع int باشد)
نکته ۵: کدهای داخل بلاک متدها مهم نبوده و هر متد میتواند طبق مثال فوق، کدهای مخصوص به خود را داشته باشد.
جهت شرکت در دورههای زبان برنامه نویسی سیشارپ، از کد تخفیف heplc30 استفاده کنید.