در فصل گذشته مفاهیم گنگ زیادی برای شما عزیزان مطرح شده است که شاید هیچ پیش فرض ذهنی نسبت به آنها نداشته باشید. اما نگران نباشید، این فصل توضیح جامع و کاملی را در ارتباط با متد ها در اختیار شما قرار میدهد تا مقدمهی ورود به دنیای کلاسها در زبان برنامهنویسی C# را فراهم کنیم.
مقدمه
یک متد به عنوان مجموعهای از عبارات و کدها شناخته میشود. در زبان برنامهنویسی C# هر کلاس حداقل یک متد به نام Main دارد که در اکثر مثال ها و برنامهها با آن آشنا شدید. متدها همواره به صورت زیر مورد استفاده قرار میگیرند:
- تعریف یک متد
- فراخوانی یک متد
یعنی باید ابتدا یک متد را تعریف کرد و سپس آن را درون مجموعهی کدهای خود فراخوانی کنیم.
تعریف متد (Method)
در زبان برنامهنویسی سی شارپ متدها به شیوه زیر تعریف میشوند:
برای هر المان موجود در ساختار فوق یک تعریف ارائه میدهیم:
Access Modifier: با مطالعهی فصل ۷ متوجه خواهید شد که به عنوان یک تعیین سطح دسترسی برای متغییرها و متدها مورد استفاده قرار میگیرد و در ۵ نوع مختلف ارائه میشود.
Return type: یک متد معمولا یک مقدار را باز میگرداند. مقداری که بازگردانده میشود دارای یک نوع است و آن نوع در این محل نوشته میشود. اگر یک متد هیچ مقداری را باز نگرداند از نوع void تعریف میشود.
Method name: به عنوان یک نام واحد برای متد شناخته میشود. این نام به بزرگ و کوچک بودن حروف حساس است. یعنی متدی با نام Name و متدی با نام name با یکدیگر متفاوت هستند. معمولا متدها را با ساختار camelCase تعریف میکنند مثلا متد getValue.
Parameter list: شامل لیستی از پارامترهاست که به متد ارسال شده تا عملیات موردنظر را روی داده انجام دهد.
Method body: در این قسمت مجموعه تمام کدهای موردنیاز درج میشود.
در مثال زیر با یک متد که درون کلاسی تحت عنوان NumberManipulator تعریف شده است، آشنا میشوید:
همانطور که ملاحظه میکنید این کلاس دارای یک متد با تعیین سطح دسترسی public و نوع بازگشتی int به نام FindMax تعریف شده است که آرگومانهای num1 و num2 از نوع int را دریافت کرده و عملیات پیدا کردن بیشترین مقدار را درون Method body یا بدنهی اصلی خود انجام میدهد.
فراخوانی متدها در C#
میتوان یک متد را فراخوانی نام آن از یک کلاس در دسترس داشت و مقادیر مختلفی را به عنوان آرگومان به آن ارسال و از ان استفاده کرد. به مثال زیر توجه کنید:
خروجی این مثال به صورت زیر خواهد بود:
یعنی شما ابتدا متد را تعریف کرده و سپس آن را درون تابع یا متد اصلی main استفاده کردهاید.
همچنین درنظر داشته باشید که تمام متدهای public را میتوان درون سایر کلاسها نیز استفاده کرد. مثال زیر به شما کمک میکند تا درک بهتری از این مفهوم داشته باشید:
همانطور که ملاحظه کردید از متد FindMax در کلاس دیگری تحت عنوان Test استفاده کردیم. در نهایت خروجی این مثال به صورت زیر خواهد بود:
ارسال پارامترها به متدها در C#
ارسال پارامترها در زبان برنامهنویسی C# به سه نوع مختلف صورت میپذیرد:
- پارامترهای مقداری (Value Parameters)
- پارامترهای مرجع (Reference Parameters)
- پارامترهای خروجی (Output Parameters)
پارامترهای مقداری (Value Parameters)
این نوع پارامترها مقادیر واقعی که به عنوان آرگومان به متدها ارسال میشوند را دقیقا درون تابع برده و مورد استفاده قرار میدهند. در مثالهایی که ابتدای این فصل مطرح کردیم تمام دادهها دقیقا به همینصورت به متد ارسال میشدند.
پارامترهای مرجع (Reference Parameters)
یک پارامتر مرجع به محل حافظه یک متغییر رجوع میکند. هنگامیکه یک پارامتر به صورت مرجع ارسال میشود، بر خلاف پارامترهای مقداری، یک فضای جدید ایجاد نمیشود. پارامترهای مرجع در یک حافظه یکسان و متناسب با پارامتر اصلی و واقعی نمایش داده میشوند که به این متد اعمال میشوند. پارامترهای مرجع را با استفاده از کلیدواژهی ref تعریف میکنند. و هر آنچه روی مقدار واقعی تغییر کند به علت اینکه پارامتر مرجع به آن حافظه و خانه رجوع میکند، مقدارش تغییر کرده و برابر مقدار واقعی میشود. به مثال زیر توجه کنید:
ابتدا مقادیر a و b برابر ۱۰۰ و ۲۰۰ است ولی هنگامیکه متد swap اعمال میشود. مقادیر a و b با یکدیگر جابهجا میشود و اگر مجددا مقدار a و b را مشاهده کنیم، متوجه میشویم که تغییر کردهاند. یعنی پارامترهای ارجاع اگر تغییر کنند، پارامترهای اصلی نیز دچار تغیر شده و مقادیری را نمایش میدهند که در متد با پارامترهای ارجاع پیاده سازی میشود. در نهایت خروجی این مثال به صورت زیر میباشد:
پارامترهای خروجی (Out Parameters)
متدها همواره و در حالت پیش فرض تنها یک مقدار را باز میگردانند حال اگر بخواهیم دو مقدار را از یک متد بازگردانیم از روش پارامترهای خروجی استفاده میکنیم. پارامترهای خروجی را با کلمهی کلیدی out تعریف میکنند. مثال زیر را با یکدیگر بررسی میکنیم:
در این مثال ابتدا مقدار a برابر ۱۰ تعریف شده و سپس با اعمال متد پارامتر a مقداری برابر ۵ را خواهد داشت و به عنوان خروجی در دسترس است در نهایت خروجی این مثال به صورت زیر خواهد بود:
یکی دیگر از مزیتهای استفاده از پارامترهای out این است که برای این پارامترها نیازی به مقداردهی اولیه نیست. یعنی حتما نباید در ابتدا بنویسیم int a=100. در مثال زیر متغییرهای a و b مقداردهی نشدهاند و پس از ورود به متد getValues مقادیر آنها توسط ورودی از کاربر دریافت و در نهایت چاپ میشود:
در نهایت خروجی به صورت زیر خواهد بود:
در این بخش شما یاد گرفتید که چگونه یک متد را تعریف و مورد استفاده قرار دهید. بخش بعدی را به توضیح مفصل کلاسها و مفاهیم شیءگرایی میپردازیم تا شما عزیزان به دنیای حرفهای برنامهنویسی قدم بگذارید. با ما همراه باشید.
منبع: روکسو