簡體   English   中英

通過引用而不是值將對象傳遞到數組中

[英]Passing objects into an array by reference instead of value

我正在處理一些C#代碼,並且有8個Point,這些Point被放入6個Point數組中,每個數組具有不同的組合,類似於下面的示例:

Point pt10 = new Point(10,10);
Point pt20 = new Point(20,20);
Point pt30 = new Point(30,30);

Point[] ptArr1 = {pt10, pt20};
Point[] ptArr2 = {pt10, pt30};

然后我注意到,在初始化Point數組后,對Point的更改未反映在數組中,這告訴我數組包含原始Points的副本,而不是Points本身。 這在內存方面是浪費嗎?如果這樣,是否有辦法使數組引用點,而不是復制值?

您觀察到的行為發生在C#中的結構上,原因是:

結構在分配時被復制。 將結構分配給新變量后,將復制所有數據,並且對新副本的任何修改都不會更改原始副本的數據。 使用諸如字典之類的值類型集合時,記住這一點很重要。 來源

如果要引用存儲在數組中的點,以便變量的更改反映在數組中,則應為點使用類,而不是結構。

這在內存方面是否是浪費的:不,將像Point這樣的小對象存儲為值類型( struct )比引用類型( class )便宜。 引用類型的大小將包括引用本身(對於x64為8個字節),對象標頭(我認為為8個字節)和數據本身,而對於值類型,僅存在值成本。

筆記

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM