C#常见技能_参数传递
发布人:shili8
发布时间:2025-02-26 18:55
阅读次数:0
**C# 常见技能 - 参数传递**
在 C# 中,函数可以接收多种类型的参数,包括值类型、引用类型等。理解如何传递这些参数至关重要,以便编写高效且易于维护的代码。
###1. 值类型参数值类型参数是通过值传递给函数的,这意味着在函数内部创建了一个副本,而不是直接操作原始值。
csharppublic class Program{
public static void PrintValue(int value)
{
// 在函数内部,value 是一个副本 Console.WriteLine($"函数内:{value}");
}
public static void Main()
{
int originalValue =10;
Console.WriteLine($"原值:{originalValue}");
PrintValue(originalValue);
Console.WriteLine($"原值(未改变):{originalValue}");
}
}
在上述示例中,`PrintValue` 函数接收一个 `int` 值类型参数。由于是通过值传递的,所以函数内部操作的是副本,而不是原始值。
###2. 引用类型参数引用类型参数(如类、数组等)是通过引用传递给函数的,这意味着函数可以直接修改这些对象。
csharppublic class Program{
public static void PrintReference(Person person)
{
// 在函数内部,person 是一个引用 Console.WriteLine($"函数内:{person.Name} {person.Age}");
}
public class Person {
public string Name { get; set; }
public int Age { get; set; }
}
public static void Main()
{
Person originalPerson = new Person { Name = "John", Age =30 };
Console.WriteLine($"原值:{originalPerson.Name} {originalPerson.Age}");
PrintReference(originalPerson);
// 修改引用类型参数 person.Name = "Jane";
Console.WriteLine($"修改后原值:{originalPerson.Name} {originalPerson.Age}");
}
}
在上述示例中,`PrintReference` 函数接收一个 `Person` 引用类型参数。由于是通过引用传递的,所以函数内部可以直接修改这些对象。
###3. out 参数out 参数是一种特殊类型的参数,它必须在函数调用时赋值,并且不能在函数内部重新赋值。
csharppublic class Program{
public static void GetMaxValue(int a, int b, out int maxValue)
{
// 在函数内部,maxValue 是一个out参数 maxValue = Math.Max(a, b);
}
public static void Main()
{
int originalA =10;
int originalB =20;
Console.WriteLine($"原值:{originalA} {originalB}");
GetMaxValue(originalA, originalB, out int maxValue);
Console.WriteLine($"函数内maxValue:{maxValue}");
}
}
在上述示例中,`GetMaxValue` 函数接收两个 `int` 值类型参数和一个 `out int` 参数。由于是通过值传递的,所以函数内部操作的是副本,而不是原始值。
###4. ref 参数ref 参数是一种特殊类型的参数,它必须在函数调用时赋值,并且可以在函数内部重新赋值。
csharppublic class Program{
public static void GetMaxValue(ref int a, ref int b)
{
// 在函数内部,a和b是ref参数 if (a > b)
{
a = Math.Max(a, b);
}
else {
b = Math.Max(a, b);
}
}
public static void Main()
{
int originalA =10;
int originalB =20;
Console.WriteLine($"原值:{originalA} {originalB}");
GetMaxValue(ref originalA, ref originalB);
Console.WriteLine($"函数内maxValue:{Math.Max(originalA, originalB)}");
}
}
在上述示例中,`GetMaxValue` 函数接收两个 `int` 值类型参数,并且使用 `ref` 关键字来指定它们是 ref 参数。由于是通过引用传递的,所以函数内部可以直接修改这些对象。
###5. params 参数params 参数是一种特殊类型的参数,它允许在函数调用时传递多个值。
csharppublic class Program{
public static void PrintValues(params int[] values)
{
// 在函数内部,values是一个数组 foreach (int value in values)
{
Console.WriteLine(value);
}
}
public static void Main()
{
PrintValues(10,20,30);
PrintValues(new int[] {40,50,60 });
}
}
在上述示例中,`PrintValues` 函数接收一个 `params int[]` 参数。由于是通过值传递的,所以函数内部操作的是副本,而不是原始值。
### 总结C# 中有多种类型的参数传递方式,包括值类型、引用类型、out 参数、ref 参数和params 参数等。理解这些概念可以帮助你编写高效且易于维护的代码。

