C# 方法參數 out、ref、param 詳解


ref和out都對函數參數采用引用傳遞形式——不管是值類型參數還是引用類型參數,並且定義函數和調用函數時都必須顯示生命該參數為

ref/out形式。兩者都可以使函數傳回多個結果。

ref 類似於 PHP 中在函數參數前的 &

兩者區別:

兩種參數類型的設計思想不同,ref的目的在於將值類型參數當作引用型參數傳遞到函數,是函數的輸入參數,並且在函數內部的任何改變也

都將影響函數外部該參數的值;而out的目的在於獲取函數的返回值,是輸出參數,由函數內部計算得到的值再回傳到函數外部,因此必須在

函數內部對該參數賦值,這將沖掉函數外部的任何賦值,使得函數外部賦值毫無意義。

表現為:

1、out必須在函數體內初始化,這使得在外面初始化變得沒意義。也就是說,out型的參數在函數體內不能得到外面傳進來的初始值。

2、ref必須在函數體外初始化。
3、兩者在函數體內的任何修改都將影響到函數體外面。

 

語法:

namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int n1 = 10; Incr(ref n1); Console.WriteLine(n1); Decr(out n1); Console.WriteLine(n1); Console.ReadKey(); } public static void Incr(ref int n1) { n1++; } public static void Decr(out int n1) { n1 = 1; n1--; } } }

 

params 關鍵字可以指定在參數數目可變處采用參數的方法參數,類似於JS 中的 arguments (JS中arguments無需指定,函數內可直接使用)(PHP中 func_get_arg() 或者使用擴展運算符...$args 用一個變量已數組的形式接收所有參數)

在方法聲明中的 params 關鍵字之后不允許任何其他參數,並且在方法聲明中只允許一個 params 關鍵字

參數類型必須保持一致

    class Program { static void Main(string[] args) { fn("hello", "word"); Console.ReadKey(); } public static void fn(params string[] list) { foreach (string str in list) { Console.WriteLine(str); } } }


免責聲明!

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



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