標籤:修改 ocs 關鍵字 har 微軟官方 img microsoft com bubuko
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沒有賦值,這裡會報錯:使用了未賦值的局部變數 refSum17 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對應的參數賦值後才能使用。
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
C# out ref 用法總結