C# 语言规范 类和对象 方法 参数
时间:2011-01-10 来源:zhanqi
参数用于向方法传递值或变量引用。
方法的参数从调用该方法时指定的实参 (argument) 获取它们的实际值。
有四类参数:值参数、引用参数、输出参数和参数数组。
值参数 (value parameter) 用于传递输入参数。
一个值参数相当于一个局部变量,只是它的初始值来自为该形参传递的实参。
对值参数的修改不影响为该形参传递的实参。
值参数可以是可选的,通过指定默认值可以省略对应的实参。
引用参数 (reference parameter) 用于传递输入和输出参数。
为引用参数传递的实参必须是变量,并且在方法执行期间,引用参数与实参变量表示同一存储位置。
引用参数使用 ref 修饰符声明。
下面的示例演示 ref 参数的用法。
-
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("{0} {1}", i, j); // Outputs "2 1" } }
输出参数 (output parameter) 用于传递输出参数。
对于输出参数来说,调用方提供的实参的初始值并不重要。
除此之外,输出参数与引用参数类似。
输出参数是用 out 修饰符声明的。
下面的示例演示 out 参数的用法。
-
using System; class Test { static void Divide(int x, int y, out int result, out int remainder) { result = x / y; remainder = x % y; } static void Main() { int res, rem; Divide(10, 3, out res, out rem); Console.WriteLine("{0} {1}", res, rem); // Outputs "3 1" } }
参数数组 (parameter array) 允许向方法传递可变数量的实参。参数数组使用 params 修饰符声明。只有方法的最后一个参数才可以是参数数组,并且参数数组的类型必须是一维数组类型。
System.Console类的 Write 和 WriteLine 方法就是参数数组用法的很好示例。它们的声明如下。
-
public class Console { public static void Write(string fmt, params object[] args) {...} public static void WriteLine(string fmt, params object[] args) {...} }
在使用参数数组的方法中,参数数组的行为完全就像常规的数组类型参数。
但是,在具有参数数组的方法的调用中,既可以传递参数数组类型的单个实参,也可以传递参数数组的元素类型的任意数目的实参。
在后一种情况下,将自动创建一个数组实例,并使用给定的实参对它进行初始化。示例:
-
Console.WriteLine("x={0} y={1} z={2}", x, y, z);
等价于以下语句:
-
string s = "x={0} y={1} z={2}"; object[] args = new object[3]; args[0] = x; args[1] = y; args[2] = z; Console.WriteLine(s, args);