参数用于向方法传递值或变量引用。方法的参数从方法被调用时指定的实参获取它们的实际值。有四类参数:值参数、引用参数、输出参数和参数数组。
值参数: 用于输入参数的传递。一个值参数相当于一个局部变量,只是它的初始值来自为该形参传递的实参。对值参数的修改不影响为该形参传递的实参。
class Test
    {
        static void ChangeValue(int value)
        {
            value = value + 100;
            Console.WriteLine("ChangeValue的值为:{0}", value);
        }
        static void Main()
        {
            int value = 10;
            Console.WriteLine("value的值为:{0}", value);
            ChangeValue(value);
            Console.WriteLine("value的值为:{0}", value);
        }
}
结果:
Value的值为:10
Changevalue的值为:110
Value的值为:10
 
引用参数: 用于输入和输出参数传递。为引用参数传递的实参必须是变量,并且在方法执行期间,引用参与实参变量表示同一存储位置。引用参数使用 ref 修饰符声明。下面的示例演示 ref 参数的使用。
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;
            Console.WriteLine("i={0},j={1}", i, j);
            Swap(ref i, ref j);
            Console.WriteLine("i={0},j={1}", i, j);                  }
}
结果:
i=1,j=2
i=2,j=1
 
 
输出参数:用于输出参数的传递。对于输出参数来说,调用方提供的实参的初始值并不重要, 输出参数在传递之前不必初始化,除此之外,输出参数与引用参数类似。输出参数是用 out 修饰符声明的。下面的示例演示 out 参数的使用。
 
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);    
        }
结果:
3,1
参数数组: 允许向方法传递可变数量的实参。参数数组使用 params 修饰符声明。只有方法的最后一个参数才可以是参数数组,并且参数数组的类型必须是一维数组类型。在使用参数数组的方法中,参数数组的行为完全就像常规的数组类型参数。但是,在具有参数数组的方法的调用中,既可以传递参数数组类型的单个实参,也可以传递参数数组的元素类型的任意数目的实参。在后一种情况下,将自动创建一个数组实例,并使用给定的实参对它进行初始化。示例:
class Test
    {
        static void ArrayTest( string  str,params string[] value)
        {
            Console.WriteLine(str);
            foreach (string st in value)
            {
                Console.WriteLine(st);
            }
        }
        static void Main()
        {
            ArrayTest(".net","", ""); /* 等价于
                                        string s="".net"";
                                        string []args=new string[]{"", ""}*/
        }
    }
结果:
.net