這可能是一個愚蠢的問題,但對象屬性佔用每個實例的任何內存?屬性會增加實例的內存大小嗎?
據我瞭解,當你實例化一個對象時,每個值字段佔用其大小和引用字段類型每個字段4個字節。但是假設你有一個具有1000個屬性的對象通過其他對象獲取數據,那麼這些屬性本身是否佔用任何內存?
自動性能自然也因爲它只是語法糖,但它似乎並不像普通的屬性應該...
這可能是一個愚蠢的問題,但對象屬性佔用每個實例的任何內存?屬性會增加實例的內存大小嗎?
據我瞭解,當你實例化一個對象時,每個值字段佔用其大小和引用字段類型每個字段4個字節。但是假設你有一個具有1000個屬性的對象通過其他對象獲取數據,那麼這些屬性本身是否佔用任何內存?
自動性能自然也因爲它只是語法糖,但它似乎並不像普通的屬性應該...
屬性就像在這方面,普通的方法。
代碼需要存儲在某處(每個類型一次),並且每個實例需要存儲任何使用的字段(自動屬性!)。局部變量也會佔用一些內存。
不,屬性只是getter和setter方法的語法糖。只有後臺字段佔用內存。如果您沒有後備字段,則不會有每個實例的內存使用情況。
如果您通過例如reflector查看已編譯的C#類,您將看到編譯器實際將該屬性轉換爲get和set方法,自動屬性被轉換爲帶有後臺字段的get和set方法,所以該字段將佔據儘可能大的空間作爲一個普通場
直接從Apress出版畫報C#
Unlike a field, however, a property is a function member.
- It does not allocate memory for data storage!
屬性tranlated爲兩個(或只是一個情況下,你只提供一個getter或者是一個setter)方法是
public int MyProp
{
get { return 1; }
set { myField = value; }
}
是在編譯時轉換(可能是埃裏克·理柏將糾正我在這,becasue也許是在預處理階段或某事物)方法
public int Get_MyProp();
public int Set_MyProp(int value);
這一切的一切,他們沒有攜帶其他開銷其他而不僅僅是附加在對象中的方法
這是有道理的,只需要確保。代理對象ftw :)我認爲你是第一個 – Homde 2010-11-19 09:37:14