ref和不加ref不等價,他們的區別在這裏

ref和不加ref不等價,他們的區別在這裏:
public class MyClass
{
 public static void Main()
 {
  Hashtable ht = new Hashtable();
  ht["abc"] = 1;
  Console.WriteLine(ht.Count);
  myFunction(ht);
  Console.WriteLine(ht.Count);
  myRefFunction(ref ht);
  Console.WriteLine(ht.Count);
 }
 
 public static void myFunction(Hashtable ht)
 {
  ht = new Hashtable();
 }
 
 public static void myRefFunction(ref Hashtable ht)
 {
  ht = new Hashtable();
 }
}
猜一下輸出的結果是什麼吧。

不加ref的參數傳遞是by value的方式,如果是一個引用類型那麼傳遞的是一個指針,也就是把對象的指針複製了一份傳遞給函數的參數,兩個指針指向同一個對象,因此對他們的修改是對同一個對象的修改。
但是在myFunction中重新建立了一個對象,實際上是修改了hashtable對象指針的一個副本,原來的那個hashtable並沒有受到影響。
加了ref就是按引用傳遞了,自是之中都只有一個指針,也指向同一個對象,對這個指針進行的操作自然是會影響原來的那個對象。因此在myRefFunction中改變了傳遞過來的指針的值,在最初的掉用函數中的原來的指針也改成了新建的對象。

因此輸出結果是
1
1
0

發佈了76 篇原創文章 · 獲贊 1 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章