早上 BoyLee 问我对 " Ref " 是否理解,很惭愧
,不知道这个关键字的用法,赶快学习了一下
using System;
using System.Collections.Generic;
using System.Text;

namespace RefDemo


{
class Program

{

/**//// <summary>
/// 演示值类型的Ref用法
/// </summary>
/// <param name="i"></param>
static void Method_1(ref int i)

{
i = 7;
}

/**//// <summary>
/// 演示引用类型的Ref用法
/// </summary>
/// <param name="str"></param>
static void Method_2(ref string str)

{
str = "Bechham";
}

static void Method_3(int i)

{
i = 7;
}

static void Method_4(string str)

{
str = "Bechham";
}


/**//// <summary>
/// 演示数组的Ref用法
/// </summary>
/// <param name="arr"></param>
static void Method_5(int[] arr)

{
for (int i = 0; i < arr.Length; i++)
arr[i] = 0;
}

/**//// <summary>
/// 演示数组的Ref用法
/// </summary>
/// <param name="arr"></param>
static void Method_6(string[] arr)

{
for (int i = 0; i < arr.Length; i++)
arr[i] = "Catherine";
}


/**//// <summary>
/// 演示值类型的Out用法
/// </summary>
/// <param name="i"></param>
static void Method_7(out int i)

{
i = 7;
}

/**//// <summary>
/// 演示引用类型的Out用法
/// </summary>
/// <param name="str"></param>
static void Method_8(out string str)

{
str = "Bechham";
}

static void Main(string[] args)

{
int val_1 = 22; // 使用Ref,需要初始化
Method_1(ref val_1);

string str_2 = "Kaka"; // 使用Ref,需要初始化
Method_2(ref str_2);

Console.WriteLine("Number:{0},Name:{1}", val_1, str_2);

Console.WriteLine("------------------------------");

int val_3 = 10;
Method_3(val_3); // 值改变

string str_4 = "Zidane";
Method_4(str_4); // 值改变

Console.WriteLine("Number:{0},Name:{1}", val_3, str_4);

Console.WriteLine("------------------------------");


int[] arr_5 =
{ 1, 2, 3, 4, 5};

for (int i = 0; i < arr_5.Length; i++)
Console.WriteLine("Array(" + i + "):" + arr_5[i].ToString());

Method_5(arr_5); // 这里没有使用REF 参数.

for (int i = 0; i < arr_5.Length; i++)
Console.WriteLine("Array(" + i + "):" + arr_5[i].ToString());

Console.WriteLine("------------------------------");


string[] arr_6 =
{ "ktgu", "lee", "lion"};

for (int i = 0; i < arr_6.Length; i++)
Console.WriteLine("Array(" + i + "):" + arr_6[i].ToString());

Method_6(arr_6); // 这里没有使用REF 参数.

for (int i = 0; i < arr_6.Length; i++)
Console.WriteLine("Array(" + i + "):" + arr_6[i].ToString());

Console.WriteLine("------------------------------");

int val_7; // 使用Out,不需要初始化
Method_7(out val_7);

string str_8; // 使用Out,不需要初始化
Method_8(out str_8);

Console.WriteLine("Number:{0},Name:{1}", val_7, str_8);

Console.ReadLine();
}
}
}
运行结果:

Ref 在C#中被定义为方法参数。MSDN中对其描述如下:
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。
若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
Out 是另一个C#中的方法参数。MSDN中对其描述如下:
out 关键字会导致参数通过引用来传递。
这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。
若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。