今天剛剛明白ref和out的區別,只限于個人理解如有不同請賜教,謝謝
首先我感覺ref和out是針對于值類型來說,以前一直認為是針對于引用類型看下面的一段代碼
1.首先結果 i=0;ints[0]=0 i=0;ints[0]=100
2.ints作為一個引用類型在傳入方法后,對ints[0]進行了賦值,是將引用類型的地址引用到了100這個值得堆上,
3.而值類型i引入到另外一個方法后進行賦值不會對原有字符串進行改變
4.ref就是為了解決這個問題,讓值類型能夠和引用類型一樣在傳入方法后值會進行改變

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Demo{ class PRogram { static void SomeFunction(int[] ints, int i) { ints[0] = 100; i = 100; } static void Main(string[] args) { int i = 0; int[] ints = { 0, 1, 2, 3, 4 }; Console.WriteLine("i=" + i); Console.WriteLine("ints=" + ints[0]); SomeFunction(ints, i); Console.WriteLine("i=" + i); Console.WriteLine("ints=" + ints[0]); Console.ReadKey(); } }}View Code5.將代碼添加上ref 結果:i=0;int[0]=0;i=100;ints[0]=100

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Demo{ class Program { static void SomeFunction(int[] ints, ref int i) { ints[0] = 100; i = 100; } static void Main(string[] args) { int i = 0; int[] ints = { 0, 1, 2, 3, 4 }; Console.WriteLine("i=" + i); Console.WriteLine("ints=" + ints[0]); SomeFunction(ints, ref i); Console.WriteLine("i=" + i); Console.WriteLine("ints=" + ints[0]); Console.ReadKey(); } }}View Code所以我認為ref是對值類型的改變而且和out一樣,在進行傳遞參數的時候對變量進行了初始化。
而out只是在傳遞參數的時候不用進行賦值,但是在調用的方法里面必須進行賦值,負責會報沒被賦值的out參數

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Demo{ class Program { static void SomeFunction(int[] ints, out int i) { ints[0] = 100; i = 100; } static void Main(string[] args) { int i; int[] ints = { 0, 1, 2, 3, 4 }; //Console.WriteLine("i=" + i); Console.WriteLine("ints=" + ints[0]); SomeFunction(ints, out i); Console.WriteLine("i=" + i); Console.WriteLine("ints=" + ints[0]); Console.ReadKey(); } }}View Code新聞熱點
疑難解答