1. What is ref & out ?
參數(shù)傳遞時按引用傳遞參數(shù)
2.Why need ref & out 吊宋?
按值傳遞是通過將實參的值Copy到形參莺奔,來實現(xiàn)將值傳遞到方法。CLR會1)給形參分配空間 2)將實參值復制到形參
//假設需要交換兩個數(shù) void Swap(int a瓤荔,int b){ int temp = a; a = b; b = temp; } --------------------------- int a = 1; int b = 2; Swap(1,2); 結(jié)果a仍為1,b仍為2
因為參數(shù)傳遞時是默認按值來傳遞的
所以這樣并不能完成值得交換。Swap方法在內(nèi)部操作得并不是a踏揣,b變量本身,而是它得克隆
匾乓,而當我們需要變量在方法執(zhí)行以后也做了相應改變時捞稿,我們就需要按引用傳遞參數(shù)的方式,于是就需要ref 和 out 這種可以使變量按引用傳遞地關鍵字拼缝。此外娱局,由于按引用傳遞的參數(shù),CLR將不再為形參分配新內(nèi)存咧七,形參相當于實參的一個別名衰齐,它們指向同一個內(nèi)存地址空間,節(jié)省內(nèi)存且效率更高继阻。
3.How to understand 引用類型 & 值類型耻涛?
假設我有一個很漂亮地風箏,然后你想要風箏穴翩,這時候我不是給你買一個和我一模一樣的風箏犬第,而是把我風箏的線交給你,至于你怎么處置這個風箏全看你自己芒帕。你所做得每一個動作都將直接作用于風箏本身歉嗓,而不是作用于和它一模一樣的副本。
值類型就相當于買的一個和我一模一樣的風箏背蟆,引用類型就相當于是我的風箏的線
4.what the same thing for ref & out ?
out & ref 都是按引用傳遞的鉴分,作用后都將改變原來參數(shù)的數(shù)值。
int a = 1; int b = 2; Swap(ref a, ref b) // a = 2, b = 1
5.what the difference between ref & out ?
- ref
有進有出
參數(shù)傳入前必須初始化否則報語法錯誤带膀,傳入?yún)?shù)在函數(shù)內(nèi)部不會重新初始化可以直接使用志珍。ref 多用于操作某個后續(xù)仍需繼續(xù)使用
的變量場景- out
只進不出
參數(shù)傳入前可以不初始化,但是傳入后在函數(shù)內(nèi)部必須先重新初始化后再使用垛叨,所以不管參數(shù)傳入前的值是多少伦糯,傳入函數(shù)后都會被初始化賦值后返回。out 多用于返回多個返回值
的場景(如bool int.tryParse(string, out i)同時返回bool 和 i)