一、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關鍵字是需要先初始化傳入的引數,才能夠使用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/107255.html
標籤:C#
上一篇:.NET進階篇06-async異步、thread多執行緒1
下一篇:C# 方法多載
