ref和out的区别
ref类型参数是按地址传递,能改变原来的数值。使用ref传参前,变量必须赋值。
带有ref类型参数的函数,不会清空变量,所以离开该函数的时候,所有ref引用的变量可以赋值也可以不赋值。
out类型参数是按地址传递,能改变原来的数值。使用out传参前,对变量可以赋值也可以不赋值。
带有out类型参数的函数,会清空变量,所以在离开该函数的时候,所有out引用的变量都要赋值。
internal static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
private static void Main()
{
// ref和out的区别
//ref类型参数是按地址传递,能改变原来的数值。使用ref传参前,变量必须赋值。
//带有ref类型参数的函数,不会清空变量,所以离开该函数的时候,所有ref引用的变量可以赋值也可以不赋值。
int j = 34;
int k = 51;
Console.WriteLine("c={0};d={1}", j, k);
SwapObj<int>.Swap(ref j, ref k);
Console.WriteLine("c={0};d={1}", j, k);
//out类型参数是按地址传递,能改变原来的数值。使用out传参前,对变量可以赋值也可以不赋值。
//带有out类型参数的函数,会清空变量,所以在离开该函数的时候,所有out引用的变量都要赋值。
int m;
string n;
SwapObjm.Swap(out m, out n );
Console.WriteLine("c={0};d={1}", m, n);
}
public static class SwapObj<T>
{
public static void Swap(ref T a, ref T b)
{
T tmp = a;
a = b;
b = tmp;
}
}
public sealed class SwapObjm
{
public static void Swap(out int a, out string b)
{
a = 100;
b = "abc";
}
}
}