一、out參數實例
【實例】求一個數組中的最大值、最小值、總和、平均值
class Program
{
static void Main(string[] args)
{
//寫一個方法 求一個數組中的最大值、最小值、總和、平均值
int[] nums = { 1, 2, 3, 4, 5, 6 ,7};
int max;
int sum;
int min;
int avg;
bool b;
string s;
double d;
GetValue(nums, out max, out min, out sum, out avg,out b,out s,out d);
Console.WriteLine("數組中的最大值:{0},最小值:{1},總和:{2},平均值:{3}",max ,min,sum,avg);
Console.WriteLine("輸出out參數的方法不同類型的值:{0},{1},{2}",b,s,d);
Console.ReadKey();
}
/// <summary>
/// 求一個整數的數組的最大值,最小值,總和,平均值
/// </summary>
/// <param name="nums">要求值的數組</param>
/// <param name="max">返回的最大值</param>
/// <param name="min">返回的最小值</param>
/// <param name="sum">返回的總和</param>
/// <param name="avg">返回的平均值</param>
public static void GetValue(int[] nums, out int max, out int min, out int sum, out int avg, out bool b,out string s,out double d)
{
//out參數要求在方法的內部必須為其賦值
max = nums[0];
min = nums[0];
sum = 0;
for (int i = 0; i < nums.Length; i++)
{
if (nums[i]>max)
{
max = nums[i];
}
if (nums[i]<min)
{
min = nums[i];
}
sum += nums[i];
}
avg = sum / nums.Length;
b = true;
s = "123";
d = 3.13;
}
}
執行代碼輸出結果,如圖所示:

總結:
如果一個方法中,返回多個相同類型的值時候,我們可以考慮返回一個數組。但是返回多個不同類型的值時候,返回數組就不行,那么這個時候,我們可以考慮用out參數。
out參數就側重於一個方法可以返回多個不同類型的值。
二、ref參數的實例
【實例】使用方法來交換兩個int類型的變量
class Program
{
static void Main(string[] args)
{
//使用方法來交換兩個int類型的變量
int n1 = 10;
int n2 = 20;
Test(ref n1, ref n2);
Console.WriteLine("兩個值互相交換后n1為{0},n2為:{1}",n1,n2);
Console.ReadKey();
}
public static void Test(ref int n1,ref int n2)
{
int temp = n1;
n1 = n2;
n2 = temp;
}
}
執行代碼輸出結果,如圖所示:

總結:
ref參數能夠將一個變量帶入一個方法中進行改變,改變完成后,再將改變后的值帶出方法。
ref參數要求在方法外必須要賦值,而方法內可以不賦值。
三、params可變參數
【實例】求任意長度數組的和 整數類型的
class Program
{
static void Main(string[] args)
{
//求任意長度數組的和 整數類型的
int[] nums = { 1, 2, 3, 4, 5, 6 };
int sum = GetSum(8,9);
Console.WriteLine(sum);
Console.ReadKey();
}
public static int GetSum(params int[] nums)
{
int sum = 0;
for (int i = 0; i < nums.Length; i++)
{
sum += nums[i];
}
return sum;
}
}
執行代碼輸出結果,如圖所示:

如圖所示:

總結:
將實參數列表中跟可變參數數組類型一致的元素都當做數組的元素去處理
params可變參數必須是形參列表中的最后一個元素,並且在方法聲明中只允許一個params關鍵字。
四、out 與ref的區別
區別:
1.使用ref參數時,傳入的參數必須被初始化,對out而言,必須在方法中對其完成初始化。
2.使用ref參數和out參數時,在方法的參數和執行方法時,都要加ref或者out關鍵字。
3.out參數適合用在需要return多個返回值的地方,而ref參數則用在需要被調用的方法修改調用者的引用的時候。
如圖所示:
out參數

ref參數

ref關鍵字是需要先初始化傳入的參數,才能夠使用。
