C# out ref 用法總結


C#里面的 out 和ref參數時常會用到,但對它們的區別比較模糊。所以總結一下。下面是測試代碼:

 1 public void Start()  2  {  3         //outSum沒必要賦值,賦值了也完全沒用。  4         //如果AddByOut函數內部直接使用out對應的參數,會報錯:使用了未被賦值的 out 參數a
 5         int outSum = 1;  6         int ov1 = 2;  7         int ov2 = 3;  8         AddByOut(out outSum, ov1, ov2);  9         Console.WriteLine("outSum : " + outSum + " v1: " + ov1 + " v2: " + ov2); 10 
11 
12         //refSum 必須賦值
13         int refSum = 1; 14         int rv1 = 2; 15         int rv2 = 3; 16         //如果refSum沒有賦值,這里會報錯:使用了未賦值的局部變量 refSum
17         AddByRef(ref refSum, rv1, rv2); 18         Console.WriteLine("refSum : " + refSum + " v1: " + rv1 + " v2: " + rv2); 19  } 20 
21     public void AddByOut(out int a, int b, int c) 22  { 23         //a = a + b + c;// a 未被賦值,不能直接使用,即使是調用的地方 out對應的參數初始化也沒用
24         a = b + c; 25  } 26 
27     public void AddByRef(ref int a, int b, int c) 28  { 29         a = a + b + c; // 可以直接使用a  30     }

測試結果:

 

總結:   1、調用帶ref關鍵字的函數,必須對 ref 對應的參數賦值;而out關鍵字不需要。

    2、帶ref 關鍵字的函數內部可以直接使用 ref 對應的參數;out 關鍵字的函數,必須在函數內部對out對應的參數賦值后才能使用。

      (歸結1,2點:ref在外面初始化,out在里面初始化

    3、兩個關鍵字都能使值類型按引用類型使用,即修改了函數外部申明的變量

 

注:更多專業介紹請參考微軟官方文檔

out 參數修飾符(C# 參考)  https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/out-parameter-modifier

ref(C# 參考)                      https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/ref


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM