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 参数等。理解这些概念可以帮助你编写高效且易于维护的代码。