2010-11-19 54 views
4

這可能是一個愚蠢的問題,但對象屬性佔用每個實例的任何內存?屬性會增加實例的內存大小嗎?

據我瞭解,當你實例化一個對象時,每個值字段佔用其大小和引用字段類型每個字段4個字節。但是假設你有一個具有1000個屬性的對象通過其他對象獲取數據,那麼這些屬性本身是否佔用任何內存?

自動性能自然也因爲它只是語法糖,但它似乎並不像普通的屬性應該...

回答

8

屬性就像在這方面,普通的方法。

代碼需要存儲在某處(每個類型一次),並且每個實例需要存儲任何使用的字段(自動屬性!)。局部變量也會佔用一些內存。

+0

這是有道理的,只需要確保。代理對象ftw :)我認爲你是第一個 – Homde 2010-11-19 09:37:14

1

不,屬性只是getter和setter方法的語法糖。只有後臺字段佔用內存。如果您沒有後備字段,則不會有每個實例的內存使用情況。

0

如果您通過例如reflector查看已編譯的C#類,您將看到編譯器實際將該屬性轉換爲get和set方法,自動屬性被轉換爲帶有後臺字段的get和set方法,所以該字段將佔據儘可能大的空間作爲一個普通場

4

直接從Apress出版畫報C#

Unlike a field, however, a property is a function member. 
- It does not allocate memory for data storage! 
0

屬性tranlated爲兩個(或只是一個情況下,你只提供一個getter或者是一個setter)方法是

public int MyProp 
{ 
    get { return 1; } 
    set { myField = value; } 
} 

是在編譯時轉換(可能是埃裏克·理柏將糾正我在這,becasue也許是在預處理階段或某事物)方法

public int Get_MyProp(); 
public int Set_MyProp(int value); 

這一切的一切,他們沒有攜帶其他開銷其他而不僅僅是附加在對象中的方法