【发布时间】:2015-08-27 19:53:39
【问题描述】:
我一直在努力研究 C# 方法。可以通过三种方式将参数传递给 C# 方法。
值参数:此方法将参数的实际值复制到函数的形式参数中。在这种情况下,对函数内部参数所做的更改对参数没有影响。
引用参数:此方法将对参数的内存位置的引用复制到形参中。这意味着对参数所做的更改会影响参数。
输出参数:此方法有助于返回多个值。
我通过下面的示例代码了解了上述类型的传递参数。
using System;
namespace PassingParameterByReference
{
class MethodWithReferenceParameters
{
public void swap(ref int x)
{
int temp = 5;
x = temp;
}
static void Main(string[] args)
{
MethodWithReferenceParameters n = new MethodWithReferenceParameters();
/* local variable definition */
int a = 100;
Console.WriteLine("Before swap, value of a : {0}", a);
/* calling a function to swap the value*/
n.swap(ref a);
Console.WriteLine("After swap, value of a : {0}", a);
Console.ReadLine();
}
}
}
上面的代码编译执行后,会产生如下结果:
交换前,a 的值:100
交换后,a 的值:5
通过这些代码,我可以理解通过引用将参数传递给方法。然后我检查下面的代码以了解通过输出将参数传递给方法。
using System;
namespace PassingParameterByOutput
{
class MethodWithOutputParameters
{
public void swap(out int x)
{
int temp = 5;
x = temp;
}
static void Main(string[] args)
{
MethodWithOutputParameters n = new MethodWithOutputParameters();
/* local variable definition */
int a = 100;
Console.WriteLine("Before swap, value of a : {0}", a);
/* calling a function to swap the value */
n.swap(out a);
Console.WriteLine("After swap, value of a : {0}", a);
Console.ReadLine();
}
}
}
上面的代码编译执行后,会产生如下结果:
交换前,a 的值:100
交换后,a 的值:5
这些示例代码以不同的方式执行相同的操作。而且我无法理解两种方法之间的区别。(通过输出和引用将参数传递给方法)。两个例子的输出是一样的。这个小区别是什么?
【问题讨论】:
-
您声称第二个示例编译并运行,但是我得到两个编译器错误。在
swap中都关于使用未分配的参数 x 和 y。 -
我修复了你所说的一个错误。以上交换方法有效。它们以不同的方式产生相同的输出。(通过输出和引用将参数传递给方法)
标签: c# methods parameters parameter-passing pass-by-reference