1.1值参数
对于方法调用的 参数 ,默认会把 值 传递 进方法;
使用方法:在方法声明中,参数前不加任何修饰符(如out或ref等)即为值参数。
调用方法:调用方法时,直接传递实参。
特点:值参数传递的是实参的副本,方法内部对形参的修改不会影响实参的值。这种方式适用于不需要修改原始数据的场景。
例子:
// 定义一个方法,接受一个值参数
static void ChangeNumber(int num)
{
num = 20; // 在方法内部修改形参num的值为20
Console.WriteLine("方法内部,num的值为: " + num); // 输出方法内部的num值
}
1.2引用参数(ref)
引用参数(ref) 用于将变量的引用传递给方法,而不是传递变量的值,在方法内部对参数的修改会直接影响原始变量的值。
使用方法:在方法定义中,使用 ref
关键字修饰参数。
调用方法:在方法调用时,也必须使用 ref
关键字传递参数。
例子:
using System;
class Program
{
static void Main()
{
int number = 10; // 定义一个整数变量,初始值为10
Console.WriteLine("调用方法前的值: " + number); // 输出调用方法前的值
ModifyValue(ref number); // 调用方法,传递number的引用
Console.WriteLine("调用方法后的值: " + number); // 输出调用方法后的值
}
static void ModifyValue(ref int value) // 定义方法,使用ref关键字修饰参数
{
value = 20; // 在方法内部修改参数的值
}
}
1.3输出参数(out)
使用 out 会 定义一个 局部变量,用于从方法中返回多个值,也会 传引用 到方法中,。
与值参数和引用参数(ref)不同,输出参数的主要特点是:
和 ref相比,两者写法不一样。 ref需要提前定义,而 out 则 不能提前定义。
例子:
using System;
class Program
{
static void CalculateValues(int[] numbers, out int max, out int min, out int sum, out double avg)
{
max = numbers.Max(); // 计算最大值
min = numbers.Min(); // 计算最小值
sum = numbers.Sum(); // 计算总和
avg = numbers.Average(); // 计算平均值
}
static void Main()
{
int[] numbers = { 1, 2, 3, 4, 5 };
int max, min, sum;
double avg;
CalculateValues(numbers, out max, out min, out sum, out avg);
Console.WriteLine($"Max: {max}");
Console.WriteLine($"Min: {min}");
Console.WriteLine($"Sum: {sum}");
Console.WriteLine($"Average: {avg}");
}
}
1.4只读传引用(in)
用于确保在方法内部对参数的操作是只读的,不会修改原始变量的值。
引用传递:与 ref
类似,in
也是通过引用传递参数,但 in
确保了参数是只读的,而 ref
允许修改
例子:
public struct Point
{
public int X;
public int Y;
}
public void PrintPoint(in Point point)
{
Console.WriteLine($"X: {point.X}, Y: {point.Y}");
// point.X = 10; // 这行会报错,因为 point 是只读的
}
public static void Main()
{
Point p = new Point { X = 5, Y = 10 };
PrintPoint(in p); // 传递只读引用
}
1.5返回引用
返回引用是一种允许方法返回变量引用的特性,主要用于优化性能,尤其是在处理大型数据结构时。通过返回引用,可以直接修改原始变量的值,而不需要创建副本。
例子:
返回引用的方法需要在方法签名中声明ref
关键字,并在调用时使用ref
关键字接收返回的引用。
public ref int FindMax(ref int first, ref int second, ref int third)
{
ref int max = ref (first > second ? ref first : ref second);
return ref (max > third ? ref max : ref third);
}
引用参数(ref):用于将变量的引用传递给方法,方法内部对参数的修改会直接影响原始变量。
返回引用(ref return):用于从方法中返回变量的引用,调用方可以通过返回的引用直接修改原始变量。
1.6参数数组(params)
参数数组 使用 params关键字 ,可以定义一个方法,使其能够接受任意数量的同类型参数,这些参数在方法内部被视为一个数组 。
在 调用时,也不是必须传递数组,传递一组数据也是可以的。甚至 不传参数 也是可以的。【暂不支持list,只支持数组。】
参数数组 因为 他的可选性。要求 只能放在 参数的 最后一个,也 最多 只能有一个 参数 数组。
例子:
public int Sum(params int[] numbers)
{
int total = 0;
foreach (int num in numbers)
{
total += num;
}
return total;
}
调用方法:
调用带有 params
参数的方法时,可以直接传入多个参数,或者传入一个数组。
int result1 = Sum(1, 2, 3); // 直接传入多个参数
int result2 = Sum(new int[] {4, 5, 6}); // 传入数组