簡體   English   中英

Properties是否會增加Instances的內存大小?

[英]Does Properties increase memory size of Instances?

這可能是一個愚蠢的問題,但對象屬性是否占用每個實例的任何內存?

正如我在實例化對象時所了解的那樣,每個值字段占用其大小,引用字段類型為每個字段4個字節。 但是假設你有一個具有1000個屬性的對象,這些屬性通過其他對象獲取數據,這些屬性是否會占用任何內存?

自動屬性自然會做,因為它只是語法糖,但它似乎不像普通屬性應...

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

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

直接來自Apress Illustrated C#

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

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

如果通過例如反射器查看已編譯的C#類,您將看到編譯器實際上將屬性轉換為get和set方法,自動屬性被轉換為帶有支持字段的get和set方法,因此該字段將占用盡可能多的房間作為常規場地

屬性被轉換為兩個(或者只有一個,如果你只提供一個getter或者一個setter)方法

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

在編譯期間翻譯(可能是Eric Lipper將在此處糾正我,因為可能是在預處理階段或某些階段)進入方法

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

總而言之,除了對象中的其他方法之外,它們不會帶來任何其他開銷

暫無
暫無

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

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