日期:2014-05-17  浏览次数:20824 次

C#中的引用传递、值传递

一、传递参数

既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员(方法、属性、索引器、运算符和构造函数)更改参数的值,并保持该更改。

二、传递值类型参数

 值类型变量直接包含其数据,这与引用类型变量不同,后者包含对其数据的引用。因此,向方法传递值类型变量意味着向方法传递变量的一个副本。方法内发生的对参数的更改对该变量中存储的原始数据无任何影响。如果希望所调用的方法更改参数的值,必须使用 ref  out 关键字通过引用传递该参数。为了简单起见,下面的示例使用 ref

1. 通过值传递值类型

class PassingValByVal
{
	static void SquareIt(int x)
	// The parameter x is passed by value.
	// Changes to x will not affect the original value of x.
	{
		x *= x;
		System.Console.WriteLine("The value inside the method: {0}", x);
	}
	static void Main()
	{
		int n = 5;
		System.Console.WriteLine("The value before calling the method: {0}", n);
SquareIt(n);  // Passing the variable by value.
	System.Console.WriteLine("The value after calling the method: {0}", n);
	}
}
运行结果为:

变量 n 为值类型,包含其数据(值为 5)。当调用 SquareIt 时,的内容被复制到参数 x 中,在方法内将该参数求平方。但在 Main 中,的值在调用 SquareIt 方法前后是相同的。实际上,方法内发生的更改只影响局部变量 x

2.通过引用传递值类型

下面的示例除使用 ref 关键字传递参数以外,其余与上一示例相同。参数的值在调用方法后发生更改

class PassingValByRef
{
	static void SquareIt(ref int x)
	// The parameter x is passed by reference.
	// Changes to x will affect the original value of x.
	{
		x *= x;
		System.Console.WriteLine("The value i