方法引數修飾符ref和out的區別
阿新 • • 發佈:2019-02-06
out和ref
1)out和ref傳變數的地址(引用地址),形參改變,實參也改變。因為他們都是引用一個地址的;
2)帶ref和out修飾的引數只能傳遞變數不能傳遞常量.
3)out和ref的區別
out修飾的引數必須在方法內修改,而ref可以修改也可以不修改;
out在傳入引數的時候,引數是區域性變數的話,可以不用賦值,因為out一定會對其進行賦值;
而ref修飾的引數,在實參必須有初始值才能呼叫。因為ref修飾的不一定會給它賦值。
上程式碼:
class Program { static void Main(string[] args) { int[] zs = { 3, 13, 6, 45, 6, 7, 99, 179 }; //區別,使用ref修飾的引數,再使用前必須賦初始值; int min=0, max; //呼叫方法的時候也要加ref和max GetMinAndMax(zs,ref min,out max); Console.WriteLine("這個陣列中最大的值是{0},最小的值是{1}",max,min); Console.ReadKey(); } #region out引數求陣列中最大值和最小值 static void GetMinAndMax(int[] nums, ref int min, out int max) { //傳入陣列為空,則返回0 if (nums == null) { min = 0; max = 0; return; } //氣泡排序:面試用, //實際開發:Array.Sort(nums); for (int i = 0; i < nums.Length - 1; i++) { for (int j = 0; j < nums.Length - 1 - i; j++) { if (nums[j] > nums[j + 1]) { int temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } } //找出兩個數 min = nums[0]; max = nums[nums.Length - 1]; } #endregion }