C# 方法 中,参数(Parameters) 是传递给方法的数据。C# 提供多种参数类型,如 值传递、引用传递、输出参数、可选参数 和 可变参数(params)。掌握 C# 方法参数的不同类型,可以帮助编写更灵活、更高效的代码。根据不同的需求,选择合适的参数类型,可以更好地实现代码的逻辑。本文主要介绍C# 类中方法的参数,还包括形式参数和实际参数,及它们之间区别和相关的示例代码。

1、参数(形式参数和实际参数)

数据可以作为参数传递给方法。 参数充当方法内部的变量。

在方法名称后的括号内指定参数。 可以根据需要添加任意数量的参数,只需用逗号分隔即可。

下面的示例使用一个名为fnamestring作为方法的参数。

例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        static void MyMethod(string lname) {
            Console.WriteLine(lname + " is very good");;
         }
        static void Main(string[] args)
        {
            MyMethod("csharp");
            MyMethod("java");
            MyMethod("python");
            Console.ReadKey();
        }
    }
}

在上面的示例中:fname是一个形式参数,简称形参,而,"csharp""python"是实际参数,简稳称实参。

2、多个参数

可以根据需要定义多个参数:

例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        static void MyMethod(string lname, int age) {
            Console.WriteLine(lname + " is very good");;
         }
        static void Main(string[] args)
        {
            MyMethod("csharp",5);
            MyMethod("java",8);
            MyMethod("python",11);
            Console.ReadKey();
        }
    }
}

注意:当使用多个参数时,调用方法传递的参数个数,也就是实参的个数,必须方法的参数的个数相同,也就是与形参的个数相同,并且参数的顺序也要相同。

3、方法返回值(return)

上面的示例中使用的void关键字指示该方法不应返回值。如果要让该方法返回值,则可以使用原始数据类型(例如,intchar等)代替void,然后在方法内使用return关键字:

例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
         static int MyMethod(int x) {
            return 5 + x;
        }

        static void Main(string[] args)
        {
            Console.WriteLine(MyMethod(5));
        }
    }
}

下面示例中方法输出两个参数的和:

例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
         static int MyMethod(int x,int y) {
            return x + y;
        }

        static void Main(string[] args)
        {
            Console.WriteLine(MyMethod(4,5));
        }
    }
}

还可以将方法的返回值直接赋值给变量:

例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
         static int MyMethod(int x,int y) {
            return x + y;
        }

        static void Main(string[] args)
        {   
            int z = MyMethod(4,5);
            Console.WriteLine(z);
        }
    }
}

4、方法中使用If else条件

在方法中通常使用if else语句:

例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
  // 使用名为age的整型变量创建checkAge()方法
      static void CheckAge(int age) 
      {

        if (age < 18) 
        {
          
            Console.WriteLine("未成年");
            
        } 
        else 
        {
           
            Console.WriteLine("你是个成年人了");
        }
      }

        static void Main(string[] args)
        {   
            CheckAge(24); 
        }
    }
}

5、形参和实参的区别

1)形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。

2)实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 

3)形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。

4)形参:全称为"形式参数"是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传如的参数.

5)实参:全称为"实际参数"是在调用时传递个该函数的参数.

6、引用参数(ref 关键字)

ref参数 允许方法修改调用者的变量,因为它传递的是变量的引用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        public static void DoubleValue(ref int value)
        {
            value *= 2; // 直接修改原始变量
        }

        static void Main(string[] args)
        {
            int num = 10;
            DoubleValue(ref num);
            Console.WriteLine(num); // 输出 20
        }
    }
}

7、输出参数(out 关键字)

out参数 可以方法返回多个值,但与 ref 不同,调用前变量可以不初始化。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        public static void Divide(int a, int b, out int quotient, out int remainder)
        {
            quotient = a / b;
            remainder = a % b;
        }
        
        static void Main(string[] args)
        {
            int q, r;
            Divide(10, 3, out q, out r);
            Console.WriteLine($"Quotient: {q}, Remainder: {r}");
            // 输出: Quotient: 3, Remainder: 1
        }
    }
}

8、可选参数(默认值参数)

可选参数 允许方法参数有默认值,调用时可以省略这些参数。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        public static void Greet(string name = "Guest")
        {
            Console.WriteLine($"Hello, {name}!");
        }

        static void Main(string[] args)
        {
            // 输出: Hello, Guest!
            Greet();       
            // 输出: Hello, Alice!
            Greet("Alice");  
        }
    }
}

9、可变参数(params 关键字)

params 允许传递可变数量的参数,通常用于处理不确定数量的输入(如 Sum())。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        public static int Sum(params int[] numbers)
        {
            int total = 0;
            foreach (var num in numbers)
            {
                total += num;
            }
            return total;
        }

        static void Main(string[] args)
        {
            // 输出 15
            Console.WriteLine(Sum(1, 2, 3, 4, 5)); 
            Console.WriteLine(Sum()); // 输出 0
        }
    }
}

10、具名参数(Named Parameters)

具名参数允许使用 参数名 进行调用,而不必按顺序传递参数。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        public static void PrintInfo(string name, int age, 
        string city)
        {
            Console.WriteLine(
              $"{name}, {age} years old, from {city}");
        }

        static void Main(string[] args)
        {
             // 使用具名参数(顺序可以改变)
             PrintInfo(age: 25, name: "Alice", city: "New York");
             // 输出: Alice, 25 years old, from New York
        }
    }
}

11、in 只读参数

in 关键字用于只读参数,可用于提高性能(特别是 struct 传递)。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        public static void ShowValue(in int value)
        {
            Console.WriteLine(value);
            // value = 10; // ❌ 编译错误,不允许修改
        }

        static void Main(string[] args)
        {
            int num = 5;
            ShowValue(num);
        }
    }
}

推荐文档