C# 方法的定義,調用,和參數傳遞(學習心得 12)

用來執行一個任務的語句塊。

每個 C# 程序至少有一個 Main 方法。

使用方法需要:

  • 定義方法。
  • 調用方法。

一、定義方法

語法:

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

參數:

  • Access Specifier:訪問修飾符。
  • Return type:返回類型,一個方法可以返回一個值。返回類型是方法返回的值的數據類型。如果方法不返回任何值,則返回類型爲 void
  • Method name:方法名稱,大小寫敏感。不能與 類 中其他標識符相同。
  • Parameter list:參數列表,使用圓括號括起來。一個方法可能不包含參數。
  • Method body:方法主體,指令集。

例(比大小方法):

class NumberManipulator
{
   public int FindMax(int num1, int num2)
   {     
      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)
      {
         int result;

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

         return result;
      }
      static void Main(string[] args)
      {
         int a = 100;
         int b = 200;
         int ret;
         NumberManipulator n = new NumberManipulator(); // 類的實例化
        
         ret = n.FindMax(a, b); //調用 類的FindMax 方法
         Console.WriteLine("最大值是: {0}", ret );
         Console.ReadLine();
      }
   }
}

運行結果:

最大值是: 200

例:調用別的類下的方法

using System;

namespace CalculatorApplication
{
    class NumberManipulator
    {
        public int FindMax(int num1, int num2)
        {
            int result;

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

            return result;
        }
    }
    class Test
    {
        static void Main(string[] args)
        {
            int a = 100;
            int b = 200;
            int ret;
            NumberManipulator n = new NumberManipulator();
            ret = n.FindMax(a, b); //調用 FindMax 方法
            Console.WriteLine("最大值是: {0}", ret );
            Console.ReadLine();

        }
    }
}

運行結果:

最大值是: 200

三、遞歸方法調用

用方法進行自我調用,即遞歸。

例:計算階乘

using System;

namespace CalculatorApplication
{
    class NumberManipulator
    {
        public int factorial(int num)
        {
            int result;

            if (num == 1)
            {
                return 1; // 跳出遞歸的條件
            }
            else
            {
                result = factorial(num - 1) * num;
                // 不斷調用方法自身,實現遞歸
                return result;
            }
        }

        static void Main(string[] args)
        {
            NumberManipulator n = new NumberManipulator();
            //調用 factorial 方法
            Console.WriteLine("6 的階乘是: {0}", n.factorial(6));
            Console.WriteLine("7 的階乘是: {0}", n.factorial(7));
            Console.WriteLine("8 的階乘是: {0}", n.factorial(8));
            Console.ReadLine();

        }
    }
}

運行結果:

6 的階乘是: 720
7 的階乘是: 5040
8 的階乘是: 40320

四、參數傳遞

調用帶有參數的方法,需要傳遞參數。

傳遞參數的 3 種方式:

  • 值參數:實參和形參,使用不同內存地址,形參發生變化不影響實參,保證實參安全性。
  • 引用參數:實參和形參,使用相同內存地址。
  • 輸出參數:這種方式可以返回多個值。

4.1 按值傳遞參數

參數傳遞的默認方式。

調用方法時,爲每個參數創建一個新的存儲位置。

例:

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public void swap(int x, int y)
      {
         int temp;
         
         temp = x; /* 保存 x 的值 */
         x = y;    /* 把 y 賦值給 x */
         y = temp; /* 把 temp 賦值給 y */
      }
     
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         /* 局部變量定義 */
         int a = 100;
         int b = 200;
         
         Console.WriteLine("在交換之前,a 的值: {0}", a);
         Console.WriteLine("在交換之前,b 的值: {0}", b);
         
         /* 調用函數來交換值 */
         n.swap(a, b);
         
         Console.WriteLine("在交換之後,a 的值: {0}", a);
         Console.WriteLine("在交換之後,b 的值: {0}", b);
         
         Console.ReadLine();
      }
   }
}

運行結果:

在交換之前,a 的值:100
在交換之前,b 的值:200
在交換之後,a 的值:100
在交換之後,b 的值:200

4.2 按引用傳遞參數

對參數的內存位置進行引用。

在 C# 中,使用 ref 關鍵字聲明引用參數。

例:

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public void swap(ref int x, ref int y)
      {
         int temp;

         temp = x; /* 保存 x 的值 */
         x = y;    /* 把 y 賦值給 x */
         y = temp; /* 把 temp 賦值給 y */
       }
   
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         /* 局部變量定義 */
         int a = 100;
         int b = 200;

         Console.WriteLine("在交換之前,a 的值: {0}", a);
         Console.WriteLine("在交換之前,b 的值: {0}", b);

         /* 調用函數來交換值 */
         n.swap(ref a, ref b); // 調用的時候也要有 ref

         Console.WriteLine("在交換之後,a 的值: {0}", a);
         Console.WriteLine("在交換之後,b 的值: {0}", b);
 
         Console.ReadLine();

      }
   }
}

運行結果:

在交換之前,a 的值:100
在交換之前,b 的值:200
在交換之後,a 的值:200
在交換之後,b 的值:100

4.3 按輸出傳遞參數

使用輸出參數,可以從函數中返回兩個值。

輸出參數會把方法輸出的數據賦給自己,和引用傳遞參數類似。

例:

using System;

namespace CalculatorApplication
{
   class NumberManipulator
   {
      public void getValue(out int x )
      {
         int temp = 5;
         x = temp;
      }
   
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         /* 局部變量定義 */
         int a = 100;
         
         Console.WriteLine("在方法調用之前,a 的值: {0}", a);
         
         /* 調用函數來獲取值 */
         n.getValue(out a);

         Console.WriteLine("在方法調用之後,a 的值: {0}", a);
         Console.ReadLine();

      }
   }
}

運行結果:

在方法調用之前,a 的值: 100
在方法調用之後,a 的值: 5

提供給輸出參數的變量不需要賦值。

當需要從一個參數沒有指定初始值的方法中返回值時,輸出參數特別有用。

例:

using System;

namespace CalculatorApplication
{
   class NumberManipulator
   {
      public void getValues(out int x, out int y )
      {
          Console.WriteLine("請輸入第一個值: ");
          x = Convert.ToInt32(Console.ReadLine());
          Console.WriteLine("請輸入第二個值: ");
          y = Convert.ToInt32(Console.ReadLine());
      }
   
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         /* 局部變量定義 */
         int a , b;
         
         /* 調用函數來獲取值 */
         n.getValues(out a, out b);

         Console.WriteLine("在方法調用之後,a 的值: {0}", a);
         Console.WriteLine("在方法調用之後,b 的值: {0}", b);
         Console.ReadLine();
      }
   }
}

運行結果:

請輸入第一個值:
3
請輸入第二個值:
8
在方法調用之後,a 的值: 3
在方法調用之後,b 的值: 8
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章