您的位置:首页 > 编程语言 > C#

C# params, ref, out 关键字

2009-05-05 11:54 369 查看
如果在为方法声明参数时未使用 ref 或 out,则该参数可以具有关联的值。可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值。通过使用方法参数关键字,可以更改这种行为。

params

params 关键字可以指定在参数数目可变处采用参数的方法参数。

在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。

示例:

字面意思比较难懂,所以看示例很有用。

// keywords_ref.cs

using System;

class App

/**//*
Code
class Program
{
static void Main(string[] args)
{
int[] a = { 0, 1, 2, 3, 4, 5 };
output(a);
Console.WriteLine(a[0]);
output2(a);
Console.WriteLine(a[0]);
int a1 = 1, a2 = 2, a3 = 3;
output(a1, a2, a3);
Console.WriteLine(a1);
}

public static void output(params int[] list)
{
list[0] = 200;
foreach (int item in list)
Console.WriteLine(item);
}

public static void output2(int[] list)
{
list[0] = 100;
foreach (int item in list)
Console.WriteLine(item);
}
}

输出:

200 <--------在函数output(params int[] list)中修改list[0]
1
2
3
4
5
200 <--------原a[0]被修改
100 <--------在函数output2(int[] list)中修改list[0]
1
2
3
4
5
100 <--------原a[0]被修改
200 <--------在函数中output(params int[] list)修改list[0]
2
3
1 <--------原a1被修改

可见,很大程度上,params只是提供了另一种编码风格。其实和用数组作为参数本质上一样,微软在.NET Framework中总喜欢用多种方式来做同一件事情。

但是需要注意的是,以params传进的非数组变长参数是以临时对象的形式存放的,是值传递,不会被函数修改;数组参数则是引用传递形式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: