前幾天寫了一篇介紹 ref 使用方法的文章正確理解 C# 中的 ref 關鍵字用於幫助大家加深對 ref 使用方法的了解看來還是有部分兄弟姐妹沒有完全搞明白:( 那我就再加上一篇講述得清楚一些有不對的地方請指出大家共同提供呵呵
C# 中的變量
依據網上的一些文章介紹要了解 C# 對內存的處理首先要了解 C# 中的變量以及變量的值是什麼在 C# 中一個變量僅僅用於連接一個名稱(這個名稱當然就是變量名了我們在代碼中用到的)和一小塊內存一個變量有它的值也就是這小塊內存中存儲的值至於這小塊內存的大小以及如何解釋其中存儲的數據則是和變量的類型(值類型和引用類型)相關的;這也就是值類型和引用類型的區別所在
一個引用類型的變量的值永遠是 null 或者一個引用如果是引用則它一定會指向一個相對應的對象實例比如一個申明為 Stream s 的變量一定會是 null 或者指向一個 Stream 類的實例(當然也可能是 FileStream MemoryStream 等子類的實例)而這個變量的大小則永遠是一個引用所需的大小和其指向實例的大小是沒有關系的在 位系統上引用的大小是 個字節
而值類型則不同!一個值類型變量的值(所對應內存塊中存儲的數據)則永遠是其對應實例的值比如我們定義了一個 struct
public struct MyStruct
{
public int a;
public int b;
}
MyStruct m = new MyStruct();
在這裡變量 m 的值則是兩個整數而不是一個指向兩個整數的引用其內存中的存儲的數據大小也就是 個字節而不是引用所需的 個字節了
講到這裡大家也就會明白為什麼值類型是按值傳遞(copy整個對象中的數據對新對象數據的修改是不會影響到原對象的)而引用類型是按引用傳遞(僅僅 copy 的是引用暫時可以把它當作內存地址吧)了!而不僅僅是看它們各自的名稱呵呵在 C# 中值類型因為都是按值傳遞所以也就不存在對象生命周期引用計數啊什麼的在 unsafe 的情況下我們甚至還可以像 C++ 中的那樣申明值類型的指針!但是對於引用類型這確是不行的我想C#中引用類型的對象都是由系統來管理的;如果再允許我們用指針來指來指去的整個程序非得亂套了不可!
[] []
From:http://tw.wingwit.com/Article/program/net/201311/15016.html