Welcome

首页 / 软件开发 / C# / C#方法中的参数

C#方法中的参数2007-09-22 本站 C#中方法的参数有四种类型:

●值参数,不含任何修饰符。

●引用型参数,以ref修饰符声明。

●输出参数,以out修饰符声明。

●数组型参数,以params修饰符声明。

11.2.1 值参数

当利用值向方法传递参数时,编译程序给实参的值做一份拷贝,并且将此拷贝传递给该方法。被调用的方法不传经修改内存中实参的值,所以使用值参数时,可以保证实际值是安全的。在调用方法时,如果形式化参数的类型是值参数的话,调用的实参的值必须保证是正确的值表达式。在下面的例子中,程序员并没有实现他希望交换值的目的:

程序清单11-2:

using System;class Test{static void Swap(int x,int y){ int temp=x; x=y; y=temp;} static void Main(){ int i=1,j=2; Swap(i,j); Console.WriteLine("i={0},j={1}",i,j);}}
编译上述代码,程序将输出:

i=1,j=2

11.2.2 引用型参数

和值参不同的是,引用型参数并不开辟新的内存区域。当利用引用型参数向方法传递形参时,编译程序将把实际值在内存中的地址传递给方法。

在方法中,引用型参数通常已经初始化。再看下面的例子。

程序清单11-3:

using System;class Test{static void Swap(ref int x,ref int y){int temp=x;x=y;y=temp;}static void Main(){int i=1,j=2;Swap(ref i,ref j);Console.WriteLine("i={0},j={1}",i,j); }}
编译上述代码,程序将输出:

i=2,j=1

Main函数中调用了Swap函数,x代表i,y代表j。这样,调用成功地实现了i和j的值交换。

在方法中使用引用型参数,会经常可能导致多个变量名指向同一处内存地址。见示例:

class A{string s; void F(ref string a,ref string b){ s="One"; a="Two"; b="Three";} void G(){ F(ref s,ref s);}}
在方法G对F的调用过程中,s的引用被同时传递给了a和b。此时,s,a,b同时指向了同一块内存区域。