早上 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 關鍵字。