值型別當乙個值型別賦值給另乙個值型別的時候,預設情況下完成的是乙個成員到另乙個成員的複製。
引用型別
引用型別分配在託管堆上。其物件一直保留在記憶體中,直到.net垃圾**器將它們銷毀。預設情況下,乙個引用型別的賦值將new出乙個對該堆上同乙個物件的新引用(new關鍵字返回的是乙個指向堆上物件的引用,而不是真正的物件本身。這個引用變數儲存在棧內,以供程式以後使用)。
包含引用型別的值型別
該值型別的複製過程中,值型別依舊完成乙個成員到另一成員的複製,而引用型別依舊是new出乙個對堆上同一物件的引用的。
預設情況下,當值型別包含其他引用型別時,賦值將生成乙個引用的副本。這樣就有兩個獨立的結構,每乙個都包含指向記憶體中同乙個物件的引用(淺複製)。
按值傳遞引用型別
其實該方式也是一種成員到另一成員的複製。只不過其複製的不是成員的值(狀態),而是指向呼叫物件的引用。相當於複製了乙個新的實參例項。該例項與實參一樣指向堆上同一物件。
按引用傳遞引用型別
該方式傳遞的是引用型別的本身。通過使用ref關鍵字,傳入的是引數物件本身。
如果按引用傳遞引用型別,被呼叫者可能改變物件的狀態資料的值和所引用的物件
值型別 引用型別
在 c 中有兩種型別的資料,一種是值型別資料,一種是引用型別資料。在編碼的時候區分這兩種型別資料,可以避免一些細小的編碼錯誤。首先說說什麼型別是值型別,例如 int float bool之類的基礎型別,以及用struct定義的型別,如 datetime。除此外,如string,陣列,以及用class...
引用型別和值型別
c 是一種型別安全的語言。每乙個變數都要求定義為乙個特定的型別,並且要求儲存在變數中的值只能是這種型別的值。變數既能儲存值型別,也可以儲存引用型別,還可以是指標。這一課將講述前兩種型別,關於指標的討論我們將在下一課中進行。下面是關於值型別和引用型別不同點的概論 如果乙個變數v儲存的是值型別,則它直接...
引用型別和值型別
c 中值型別和引用型別作為方法引數傳遞的時候其實都可以說是 值 的傳遞,只不過這裡的 值 指代的東西有所區別。當方法的引數為值型別時,方法傳遞的是值本身的值。當方法的引數為引用型別時,方法傳遞的則是應用型別的引用的位址,也就是引用型別位址在棧上的值。舉個引用型別作為引數傳遞的例子 static vo...