You can get the difference between the" Params and in or Out from debug the code.
using System;
namespace TestIP
{
class gump
{
#region using ref
public double square(ref double x)
{
x = x * x;
return x;
}
public void math_routines(double x, out double half, out double square, out double cube)
{
half = x / 2;
square = x * x;
cube = x * x * x;
}
#endregion
#region using params
public void UseParams(params int[] list)
{
string temp = "";
for (int i = 0; i < list.Length; i++)
{
temp = temp + " " + list[i].ToString();
Console.WriteLine(temp);
}
}
public void UseParams2(params object[] list)
{
string temp = "";
for (int i = 0; i < list.Length; i++)
{
temp = temp + " " + list[i].ToString();
}
Console.WriteLine(temp);
}
#endregion
}
class refoutdemo
{
public static void Main()
{
gump doit = new gump();
#region test params
doit.UseParams(1, 2, 3);//看参数是3个
doit.UseParams(1, 2); //看参数是2个,可变吧
doit.UseParams2(1, 'a', "test");
int[] myarray = new int[3] { 10, 11, 12 };
doit.UseParams(myarray); //看也可以是容器类,可变吧:)
#endregion
#region test ref
double x1=600;
double half1=0;
double squared1=0;
double cubed1=0;
Console.WriteLine("Before method->x1={0}",x1);
Console.WriteLine("half1={0}",half1);
Console.WriteLine("squared1={0}",squared1);
Console.WriteLine("cubed1={0}",cubed1);
doit.math_routines(x1,out half1,out squared1,out cubed1);
Console.WriteLine("After method->x1={0}",x1);
Console.WriteLine("half1={0}",half1);
Console.WriteLine("squared1={0}",squared1);
Console.WriteLine("cubed1={0}",cubed1);
#endregion
#region test out
double a = 3;
double b = 0;
Console.WriteLine("Before squere -> a={0}, b ={1}", a, b);
b = doit.square(ref a);
Console.WriteLine("Before squere -> a={0}, b ={1}", a, b);
Console.WriteLine();
#endregion
}
}
}
Reference from others.