回覆列表
  • 1 # 使用者7141197769170

    因為在C#裡string物件是不變物件,假設有string str1="abc";那麼如果存在有這麼一條語句對str1進行再次賦值 如str1="123",那麼,此時指向str1的棧的地址並未發生改變,而是在託管堆裡重新建立一個新的物件,其值為123,而str1的棧指向託管堆裡123的地址,而原先的abc即將會被垃圾回收機制清理掉。所以ChangeString函數里對形參s賦值過程是這樣子的:形參s首先也指向了abc,但在函式體裡s又被指向了HaHa,那麼此時是s改變了指向,而實參str並沒有改變它原來的指向abc. 所以要想在函數里改變實參的值必須用ref,除物件和集合外。

    static void Main(string[] args)

    {

    string str = "123";

    Console.WriteLine(str);

    ChangeString(ref str); // 使用ref引用型,形參則可以改變實參的值

    Console.WriteLine(str);

    Console.ReadKey();

    }

    public static void ChangeString(ref string s) // 加ref,形參可以更改實參的值

    {

    s = "HaHa";

    }

  • 中秋節和大豐收的關聯?
  • 2018秋冬流行婚紗搭配珠寶法則是什麼?怎麼樣打造時尚浪漫新娘?