将参数传递给方法
调用带有参数的方法时,需要将参数传递给方法。参数可以通过三种方式传递给方法-
按值传递
这是将参数传递给方法的默认机制。在这种机制中,当调用方法时,将为每个值参数创建一个新的存储位置。实际参数的值将被复制到其中。因此,对方法内部的参数所做的更改不会对参数产生影响。以下示例演示了概念-
using System;
namespace CalculatorApplication {
class NumberManipulator {
public void swap(int x, int y) {
int temp;
temp = x; /* save the value of x */
x = y; /* put y into x */
y = temp; /* put temp into y */
}
static void Main(string[] args) {
NumberManipulator n = new NumberManipulator();
/* local variable definition */
int a = 100;
int b = 200;
Console.WriteLine("Before swap, value of a : {0}", a);
Console.WriteLine("Before swap, value of b : {0}", b);
/* calling a function to swap the values */
n.swap(a, b);
Console.WriteLine("After swap, value of a : {0}", a);
Console.WriteLine("After swap, value of b : {0}", b);
Console.ReadLine();
}
}
}
尝试一下
编译并执行上述代码后,将产生以下结果-
Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :100
After swap, value of b :200
它表明尽管值在函数内部已更改,但值没有更改。
按引用传递
引用参数是对变量的存储位置的引用。当您通过引用传递参数时,与值参数不同,不会为这些参数创建新的存储位置。参考参数表示与提供给该方法的实际参数相同的存储位置。
您可以使用ref关键字声明参考参数。以下示例演示了这一点-
using System;
namespace CalculatorApplication {
class NumberManipulator {
public void swap(ref int x, ref int y) {
int temp;
temp = x; /* save the value of x */
x = y; /* put y into x */
y = temp; /* put temp into y */
}
static void Main(string[] args) {
NumberManipulator n = new NumberManipulator();
/* local variable definition */
int a = 100;
int b = 200;
Console.WriteLine("Before swap, value of a : {0}", a);
Console.WriteLine("Before swap, value of b : {0}", b);
/* calling a function to swap the values */
n.swap(ref a, ref b);
Console.WriteLine("After swap, value of a : {0}", a);
Console.WriteLine("After swap, value of b : {0}", b);
Console.ReadLine();
}
}
}
尝试一下
编译并执行上述代码后,将产生以下结果-
Before swap, value of a : 100
Before swap, value of b : 200
After swap, value of a : 200
After swap, value of b : 100
它表明交换函数内部的值已更改,并且此更改反映在Main函数中。
output 参数
return语句只能用于从函数返回一个值。但是,使用输出参数,您可以从函数返回两个值。output 参数与参考参数相似,不同之处在于它们将数据从方法中传输出来而不是传输到方法中。
以下示例说明了这一点-
using System;
namespace CalculatorApplication {
class NumberManipulator {
public void getValue(out int x ) {
int temp = 5;
x = temp;
}
static void Main(string[] args) {
NumberManipulator n = new NumberManipulator();
/* local variable definition */
int a = 100;
Console.WriteLine("Before method call, value of a : {0}", a);
/* calling a function to get the value */
n.getValue(out a);
Console.WriteLine("After method call, value of a : {0}", a);
Console.ReadLine();
}
}
}
尝试一下
编译并执行上述代码后,将产生以下结果-
Before method call, value of a : 100
After method call, value of a : 5
为output 参数提供的变量无需分配值。当您需要通过参数从方法返回值而不给参数分配初始值时,输出参数特别有用。通过以下示例,了解这一点-
using System;
namespace CalculatorApplication {
class NumberManipulator {
public void getValues(out int x, out int y ) {
Console.WriteLine("Enter the first value: ");
x = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter the second value: ");
y = Convert.ToInt32(Console.ReadLine());
}
static void Main(string[] args) {
NumberManipulator n = new NumberManipulator();
/* local variable definition */
int a , b;
/* calling a function to get the values */
n.getValues(out a, out b);
Console.WriteLine("After method call, value of a : {0}", a);
Console.WriteLine("After method call, value of b : {0}", b);
Console.ReadLine();
}
}
}
编译并执行上述代码后,将产生以下结果-
Enter the first value:
7 #这里为控制台命令行输入
Enter the second value:
8 #这里为控制台命令行输入
After method call, value of a : 7
After method call, value of b : 8