سی شارپ - متد ها

یک متد از گروهی از دستورها تشکیل شده که با هم یک کار را انجام میدهند.همه ی برنامه های سی شارپ حداقل یک کلاس دارند که یک متد main دارد

برای استفاده یک متد، شما باید:

  • متد را تعریف کنید
  • متد را فراخوانی کنید

تعریف متد ها در سی شارپ

تعریف متد در سی شارپ به صورت زیر است :

<Access Specifier> <Return Type> <Method Name>(Parameter List)
{
   Method Body
}

در زیر عناصر مختلف یک متد آورده شده است

  • Access Specifier: نوع دسترسی یک متغیر یا متد را تعریف می کند.
  • Return type: یک متد می تواند یک مقدار را برگرداند. نوع داده ی خروجی در اینجا تعریف می شود . اگر متد هیچ مقداری را بر نمی گرداند، نوع خروجی آن void است
  • Method name: نام متد یک نام یکتا و حساس به حروف کوچ و بزرگ است و نمی تواند در کلای خودش تکراری باشد
  • Parameter list:پارامتر های داده های ارسالی به یک متد هستند. لیست پارامتر ها نوع، ترتیب و تعداد پارامترهای یک متد راتشکیل می دهد. پارامتر ها اختیاری هستند، یک متد می تواند هیچ پارامتری نداشته باشد
  • Method body: یک مجموعه دستور که برای انجام کار مورد نظر متد نوشته می شوند

مثال

قطعه کد زیر تابع FindMax را نشان می دهد که دو عدد صحیح دریافت کرده و بزرگترین آنها را بر می گرداند. دسترسی این تابع به صورت عمومی است. بنابراین توسط یک نمونه یا شی از این کلاس و از بیرون قابل دسترسی است.

class NumberManipulator
{
   public int FindMax(int num1, int num2)
   {
      /* local variable declaration */
      int result;

      if (num1 > num2)
         result = num1;
      else
         result = num2;

      return result;
   }
   ...
}

فراخوانی متد ها در سی شارپ

یک متد توسط نام آن قابل فراخوانی است. . نحوه ی انجام این کار در مثال زیر آورده شده است.

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public int FindMax(int num1, int num2)
      {
         /* local variable declaration */
         int result;
         
         if (num1 > num2)
            result = num1;
         else
            result = num2;
         return result;
      }
      static void Main(string[] args)
      {
         /* local variable definition */
         int a = 100;
         int b = 200;
         int ret;
         NumberManipulator n = new NumberManipulator();

         //calling the FindMax method
         ret = n.FindMax(a, b);
         Console.WriteLine("Max value is : {0}", ret );
         Console.ReadLine();
      }
   }
}

خروجی کد بالا به شکل زیر است:

Max value is : 200

شما همچنین می توانید متد های عمومی یک کلاس را از کلاس دیگر و توسط شی یی از آن کلاس فراخوانی کنید. برای مثال متد FindMax در کلاس NumberManipulator تعریف شده است که توسط کلاس Test قابل فراخوانی است

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public int FindMax(int num1, int num2)
      {
         /* local variable declaration */
         int result;
         
         if(num1 > num2)
            result = num1;
         else
            result = num2;
         
         return result;
      }
   }
   
   class Test
   {
      static void Main(string[] args)
      {
         /* local variable definition */
         int a = 100;
         int b = 200;
         int ret;
         NumberManipulator n = new NumberManipulator();
         
         //calling the FindMax method
         ret = n.FindMax(a, b);
         Console.WriteLine("Max value is : {0}", ret );
         Console.ReadLine();
      }
   }
}

خروجی کد فوق به شکل زیر است:

Max value is : 200

فراخوانی بازگشتی متد ها

یک متد می تواند خودش را فراخوانی کند. به این کار بازگشت یا recursion می گوییم. در زیر یک مثال آورده شده است که فاکتوریل را برای یک عدد و توسط تایع بازگشتی یا ریکرسیو (recursive) محاسبه می کند.

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public int factorial(int num)
      {
         /* local variable declaration */
         int result;
         if (num == 1)
         {
            return 1;
         }
         else
         {
            result = factorial(num - 1) * num;
            return result;
         }
      }
      
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         //calling the factorial method
         Console.WriteLine("Factorial of 6 is : {0}", n.factorial(6));
         Console.WriteLine("Factorial of 7 is : {0}", n.factorial(7));
         Console.WriteLine("Factorial of 8 is : {0}", n.factorial(8));
         Console.ReadLine();
      }
   }
}

خروجی کد بالا به شکل زیر است:

Factorial of 6 is: 720
Factorial of 7 is: 5040
Factorial of 8 is: 40320

ارسال پارامترها به یک متد

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

مکانیسم توضیحات

پارامتر های مقدار یا Value parameters

در این شیوه مقدار آرگومان ارسال شده در پارامتر تابع کپی می شود و تغییر روی مقدار پارامتر روی مقدار آرگومان تاثیری نمی گذارد.

پارامتر های ارجاع یا Reference parameters

در این نوع از ارسال ، اشاره گری به محل ذخیره سازی آرگومان در حافظه ، در پارامتر تابع قرار داده می شود.این به این معنی هست که هر دو به یک جای حافظه اشاره می کنند،بنابراین تغییراتی که در بدنه ی تابع روی پارامتر اننجام می شود ، روی آرگومان نیز اعمال می شود.

پارامتر های خروجی یا Output parameters

این پارامتر به متد اجازه می دهد بیشتر از یک خروجی برگرداند.