这可能是一个愚蠢的问题,但对象属性占用每个实例的任何内存?属性会增加实例的内存大小吗?
据我了解,当你实例化一个对象时,每个值字段占用其大小和引用字段类型每个字段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