C# out、ref關鍵字的用法和區別
阿新 • • 發佈:2019-02-06
說說自己對out、ref的認識,面試問到的機率很高喲。
out:
輸出:class Program { /* * out、ref都是引用傳遞,傳遞後使用都會改變原有的值 * out是隻出不進。ref是有進有出, * * out用法,一般用於需要返回多個引數時,如在需要返回分頁的資料時 同時返回總條數或者TryParse()會用到 * ref用法,一般用於在改變一個引數時,把他的改變反應到變數中 如在遞迴中 * */ #region Out static void Main(string[] args) { Program p = new Program(); //out傳遞引數時不用賦值(如果賦值也會被清空) string out_s; p.out_func(out out_s); Console.WriteLine(out_s); Console.ReadLine();//暫停視窗 } /// <summary> /// out傳入後需要賦值才能返回 /// </summary> /// <param name="i"></param> public void out_func(out string s) { s = "out引數已賦值,返回。"; } #endregion }
ref:
輸出:class Program { #region ref static void Main(string[] args) { Program p = new Program(); //ref傳遞時如果未初始化賦值 則會報錯 :使用了未賦值的區域性變數“ref_s” string ref_s = "已初始化。"; p.ref_func(ref ref_s); Console.WriteLine("返回的ref引數:" + ref_s); Console.ReadLine();//暫停視窗 } /// <summary> /// ref傳入前需要賦值,傳入後可不做操作返回原值 /// </summary> /// <param name="s"></param> public void ref_func(ref string s) { Console.WriteLine("傳入的ref引數:" + s); s += "已賦值返回。"; } #endregion }
總結:
- out、ref都是引用傳遞 (傳遞後改變傳遞的值會影響原來的值)
- out不需要初始化 需要在傳入的方法內部完成初始化賦值 ref必須初始化賦值
- out用於獲取函式內部的值 ref可同時改變函式內和函式外的值