Ref 把值傳遞變成引用傳遞
當調用一個方法時,傳入的參數是一個值類型,那么需要方法將這個傳入的值類型的變量值改變受到影響,我們可以使用ref 關鍵字進行處理實現。
觀察一:
結論:
根據值類型和引用類型的特點,值類型是賦值,是復制傳遞的是棧上存儲的具體值信息,如圖實參變量"a"將100賦值給方法形參"num"變量。那么值類型的改變只會影響值的本身,形參的改變沒有形象到變量"a"。
加上ref修飾形參:
結論:
通過ref關鍵字,此時傳遞變量a的時候,實參把引用傳給了形參,那么說明了這兩個變量將指向同一個引用地址,變量num在方法中的改變會影響到變量a
輸出結果:101
使用ref關鍵字的時候需要注意:
1.用了ref關鍵的方法,必須在參數列表上加上ref關鍵字,在調用該方法的時候也要加上ref關鍵字。
2.作為傳入修飾了ref的方法的實參變量,必須賦初始值
作用總結:如果想使一個值類型的變量,通過傳入一個方法進行改變,可以使用ref
OUT 讓方法返回多個值
從語法規則上來講,一個方法只能有一個返回值,如果return多個值簡直是天方夜譚,如圖:
通過out的方式實現:
static void Main(string[] args)
{
int a ;
changeNum(out a);
Console.WriteLine(a); //結果為101
}
static stringchangeNum(out int num)
{
num = 100;
num++;
return "ok";
}
使用out關鍵字需要注意:
1.在方法定義和方法調用時,都要加上out關鍵字
2.方法參數列表上修飾了out關鍵字的變量,必須在方法體賦初始值,對于方法調用提供的實參變量可以不需要賦值。
面試題
ref與out的區別是什么?
使用ref的時候要傳入相應方法的實參變量,必須賦值。而out在調用的時候只用聲明,但是在方法內部,修飾了out形參必須賦值。
ref和out有著異曲同工之妙,都可以實現相同的功能,ref側重于將值類型的值傳遞改變為引用傳遞,out側重于對于一個方法返回多個值
文章列表