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); 

这一切的一切,他们没有携带其他开销其他而不仅仅是附加在对象中的方法