这篇文章主要给大家介绍了关于C#中参数数组、引用参数和输出参数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
前言
本文主要介绍了关于C#参数数组、引用参数和输出参数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧
参数数组
在C#中,可以为函数指定一个不定长的参数,这个参数是函数定义中的最后一个参数,这个参数叫做参数数组。
下面是一个例子:
namespace Ch6Ex2
{
class Program
{
static int SumVals(params int[] vals)
{
int sum = 0;
foreach (int val in vals)
{
sum += val;
}
return sum;
}
static void Main(string[] args)
{
int sum = SumVals(1, 2, 3, 4, 5);
Console.WriteLine($"Summed Values = {sum}");
Console.ReadKey();
}
}
}
函数SumVals有一个参数数组,即vals,在定义该参数时,需要使用params参数。在调用该函数时,可以给参数输入传入多个实参。
使用分散式传参时,编译器做如下事:
1)接受实参列表,用它们在堆中创建并初始化一个数组。
2)把数组的引用保存到栈中的形参里。
3)如果在对应的形参数组的位置没有实参,编译器会创建一个有零个元素的数组来使用。
4)如果数组参数是值类型,那么值被复制,实参不受方法内部的影响。
5)如果数组参数是引用类型,那么引用被复制,实参引用的对象可以受到方法内部的影响。
在使用数组式传参时,编译器使用你的数据而不是重新创建一个。即相当引用参数。
引用参数
可以通过引用传递参数,需要使用ref关键字。
下面是一个例子:
namespace MyProgram
{
class Program
{
static void SwapInts (ref int a, ref int b)
{
int temp = b;
b = a;
a = temp;
}
static void Main(string[] args)
{
int a = 1;
int b = 2;
Console.WriteLine($"a = {a}, b = {b}");
SwapInts(ref a, ref b);
Console.WriteLine($"a = {a}, b = {b}");
Console.ReadKey();
}
}
}
这是一个简单的交换两个值的程序,由于函数SwapInts使用了引用参数,所以可以在函数中修改变量a和b的值,需要注意的是,在调用函数时也要使用ref传递引用参数。
输出参数
输出参数使用out关键字,它的效果与引用参数几乎相同,不同点是:
- 引用参数的实参必须是已经赋值的变量,而输出参数不必。
- 函数使用输出参数时,应该把它看作是未赋值的。
下面是一个例子:
namespace MyProgram
{
class Program
{
static int MaxValue (int[] intArray, out int maxIndex)
{
int maxValue = intArray[0];
maxIndex = 0;
for (int i = 0; i < intArray.Length; i++)
{
if (intArray[i] > maxValue)
{
maxValue = intArray[i];
maxIndex = i;
}
}
return maxValue;
}
static void Main(string[] args)
{
int maxIndex;
int[] intArray = { 12, 45, 23, 77, 73 };
int maxValue = MaxValue(intArray, out maxIndex);
Console.WriteLine($"maxValue = {maxValue}, maxIndex = {maxIndex}.");
Console.ReadKey();
}
}
}
这个函数将一个数组中最大值的索引作为输出参数,返回最大值。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对编程学习网的支持。
本文标题为:C#中参数数组、引用参数和输出参数示例详解
![](/xwassets/images/pre.png)
![](/xwassets/images/next.png)
- c# 模拟线性回归的示例 2023-03-14
- WPF使用DrawingContext实现绘制刻度条 2023-07-04
- 如何使用C# 捕获进程输出 2023-03-10
- Unity3D实现渐变颜色效果 2023-01-16
- Unity Shader实现模糊效果 2023-04-27
- 在C# 8中如何使用默认接口方法详解 2023-03-29
- user32.dll 函数说明小结 2022-12-26
- Oracle中for循环的使用方法 2023-07-04
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
- .NET CORE DI 依赖注入 2023-09-27