說我創建聲明一個數組:在C#中的數組聲明?
byte[] Data = new byte[4];
我在代碼與陣列玩,與一些值填充它,等後來,如果我說:
Data = new byte[16];
什麼我在做什麼:我完成擺脫舊的數組和創建一個新的空索引與16索引?還是我保持與之前相同的數組,但只是擴展索引的總數?
說我創建聲明一個數組:在C#中的數組聲明?
byte[] Data = new byte[4];
我在代碼與陣列玩,與一些值填充它,等後來,如果我說:
Data = new byte[16];
什麼我在做什麼:我完成擺脫舊的數組和創建一個新的空索引與16索引?還是我保持與之前相同的數組,但只是擴展索引的總數?
我在做什麼:我完成擺脫舊的數組並創建一個新的空索引與16索引?
是。舊的數組最終會被垃圾收集,然後「走開」(只要沒有其他引用)。您的新陣列不會保留任何原始值。
還是我保持與以前相同的數組,但只是擴展索引的總數?
你不是。如果你想要這種行爲,可以考慮使用List<byte>
,它的作用與數組非常相似,但會根據需要增長。
您還可以使用Array.Resize(Data, 16)
「調整」陣列的大小。在內部,這將創建一個新數組,然後將舊數組中的值複製到新數組中,因此結果長度爲16,但仍保留原始4個值。
您正在創建一個新數組並將其設置爲舊數組的引用。
一旦所有的引用都從一個對象中消失了,垃圾收集器就會將其從內存中刪除。
您沒有增長現有陣列。 Data
是一個參考,發生了什麼是你將該引用分配給一個新的內存塊(分配的byte[16]
),並且假設沒有其他引用等於Data
你孤立了你之前分配的內存將會導致它被垃圾收集。如果說,你做到了;
var Data = new byte[4];
var Data1 = Data;
Data = new byte[16];
那麼原來的四個字節的內存不會被排隊等待垃圾收集,直到Data1
超出範圍,因爲你仍然有該內存的引用。
當你創建一個數組時,在這種情況下,Array類對象是在內部創建的。
byte [] Data = new byte [4];
在這一行數據只是一個指向內存的引用變量。
Data = new byte [16];
當您執行此語句時,它意味着您已創建新數組並將其引用傳遞給數據引用變量。現在它丟失了舊的數組,並指向新的數組。
'Array.Resize(Data,Data。長度+ 12)'?這將創建一個包含16個元素的新陣列並保留舊的4個元素 – 2014-03-26 17:53:27