![توابع Overload](https://noandishaan.com/wp-content/uploads/2016/02/توابع-Overload.png)
در ادامه آموزش سی شارپ در بخش ششم با توابع Overload و فراخوانی آنها در کلاس form1 آشنا می شوید که به همراه مثال و تمرین توضیحات ارائه می گردد.
توابعی هستند که نام یکسان دارند ولی پارامترهای ورودی متفاوت دارند. در برنامه های سطح پایین، برای اینکه از یک تابع با ورودی های مختلف استفاده کنیم باید آنرا با نام های مختلف ذخیره می کردیم. ولی در overload مثلا اگر ۳ تابع max داشتیم که ماکزیمم اعدادی را حساب کنند و تابع اول، ماکزیمم بین دو عدد، تابع دوم ماکزیمم بین سه عدد و تابع سوم ماکزیمم بین ۴ عدد، ما باید ۳ بار تابع max را تعریف کنیم ولی همه آنها را با یک نام ذخیره کنیم مثلا max.
در فراخوانی تابع، براساس تعداد پارامترهای ورودی، تابع مورد نظر صدا زده می شود. یعنی در صورتی که در فراخوانی تابع، مثلا سه پارامتر ورودی داشته باشیم، خود به خود تابع دوم صدا زده می شود.
مثال:
تابع ماکزیمم را برای محاسبه ماکزیمم بین دو عدد، سه عدد و چهار عدد بنویسید.
جواب:
برای اینکار، در پروژه قبلی و در کلاس lib، کدهای زیر را وارد می کنیم:
توضیحات کد:
همانطور که در شکل مشخص است ما سه تابع مختلف اما با یک نام تعریف کردیم. همانطور که در جلسه ۲ نیز اشاره شد، برای اینکه بتوان تابعی در یک کلاس را در کلاس دیگر استفاده کرد باید علاوه بر عمومی بودن(public)، سراسری(static) نیز تعریف شود. نوع برگشتی تابع از نوع integer است و نام هر سه تابع را max گذاشتیم. در زیر توابع را توضیح می دهیم:
تابع ۱:
این تابع دو ورودی به نام های i و j و از نوع integer دارد.
یک متغیر کمکی بنام maxNumber تعریف کرده و مقدار j را در آن می ریزیم و آن را بعنوان ماکزیمم در نظر می گیریم. سپس با یک شرط(دستور if) چک می کنیم در صورتیکه i>j بود ماکزیمم(maxNumber) را برابر با i در نظر می گیریم و در آخر مقدار ماکزیمم(maxNumber) را بر می گردانیم.
تابع ۲:
در تابع دوم، ما سه متغیر ورودی به نام های i، j و k داریم. در این تابع، از تابع ۱ که تعریف کردیم استفاده می کنیم؛ یعنی تابع در تابع می شود و دوبار تابع ۱ را به صورت زیر صدا می زنیم:
۱٫ ابتدا با دستور (max(i,j مقدار ماکزیمم بین دو متغیر i و j را بدست می آوریم .
۲٫ سپس با استفاده دوباره از تابع max، مقدار ماکزیمم بدست آمده در مرحله ۱ را با مقدار k مقایسه کرده و مقدار ماکزیمم را برمی گرداند.
تابع ۳:
در تابع سوم، نیز دو مرحله دارد و از تابع دوم که تابع max که سه پارامتر ورودی دارد و تابع اول که دو پارامتر ورودی دارد استفاده می شود. به اینصورت که :
۱٫ ابتدا با استفاده از تابع دوم که سه پارامتر ورودی دارد مقدار ماکزیمم بین سه متغیر بدست می آید ( (max(i,j,k )
۲٫ سپس با استفاده از تابع ۱ که دو پارامتر دارد، مقدار ماکزیمم بین مقدار بدست آمده از مرحله ۱ و متغیر h بدست می آید و مقدار ماکزیمم را برمی گرداند.
فراخوانی تابع در کلاس form1:
در فرم ۱، دو تکسباکس و یک دکمه اضافه می کنیم و به صورت زیر نامگذاری می کنیم(نامهای قرمز، برابر با خصوصیت name آنهاست).
سپس کد زیر را در event کلیک دکمه btnmax می نویسیم.با این کار، تابع max را فراخوانی می کنیم.
private void btnmax_Click(object sender, EventArgs e) { int m = project1.lib.max(int.Parse(this.txtnum1.Text), int.Parse(this.txtnum2.Text)); MessageBox.Show(m.ToString()); }
int.parse: این تابع، رشته را به عدد تبدیل می کند. علت استفاده از این تابع اینست که تکسباکس ها، رشته هستند و برای اینکه پارامترهای ورودی تابع max، از نوع integer است باید از این تابع استفاده کنیم تا رشته به عدد تبدیل شود.
نکته:
چون هر دو کلاس داخل یک namespace است می توانیم نام namespace را ننویسیم( namespace در اینجا project1 است).
بدلیل اینکه در این فراخوانی تابع دو ورودی داریم، تابع max اولی فراخوانی می شود.
اگر یک تکسباکس دیگر اضافه کنیم و یا اینکه یک عدد به ورودی ها اضافه کنیم (مانند کد زیر) تابع دوم صدا زده می شود.
نکات توابع overload :
بسیاری از متدهای آماده در سی شارپ، overload هستند مثل متد show مربوط به messagebox اگر کد زیر را بنویسیم می بینیم که در پنجره راهنمای باز شده نشان می دهد که این متد، ۲۱ حالت یعنی ۲۱ overload دارد که با استفاده از کلیدهای بالا و پایین می توانیم این حالات را نگاه کنیم:
پایان قسمت ششم آموزش سی شارپ – توابع Overload در سی شارپ
نام فایل: توابع Overload در C# | آموزش سی شارپ – قسمت ششم
مشاهده تمرین: لینک به تالار گفتگو