C#中ref和out的區別
阿新 • • 發佈:2018-12-04
C#中的ref和out提供了值型別按引用進行傳遞的解決方案,當然引用型別也可以用ref和out修飾,但這樣已經失去了意義。因為引用資料型別本來就是傳遞的引用本身而非值的拷貝。ref和out關鍵字將告訴編譯器,現在傳遞的是引數的地址而不是引數本身,這和引用型別預設的傳遞方式是一樣的。
ref和out的區別:
1、過載:out和ref不能構成過載,編譯器提示:不能定義僅在ref和out的上存在不同的過載方法
eg、
static void Fun(ref int a,ref int b) { a = a + b; b = 6; } static void Fun(out int a,out int b) { b = 6; a = 14; }
2、呼叫前賦值
ref作為引數的函式在呼叫前,實參必須賦初始值。
out作為引數的函式在呼叫前,實參可以不賦初始值。
3、函式中,引數賦值
在呼叫函式中,out引入的引數必須賦值;
而ref引入的引數在返回前可以不賦值;
比較完整的測試程式碼:
class Program { static void Main(string[] args) { int a = 6; int b = 66; Fun(ref a,ref b); //Fun(out a,out b); Console.WriteLine("a:{0},b:{1}",a,b); Console.ReadLine(); } static void Fun(ref int a,ref int b) { a = a + b; // b = 6; } /* static void Fun(out int a,out int b) { b = 6; a = 14; }*/ }