这可能是一个愚蠢的问题,但对象属性是否会占用每个实例的任何内存?
正如我在实例化对象时所理解的那样,每个值字段占用其大小,引用字段类型为每个字段4个字节。但是假设你有一个具有1000个属性的对象,这些属性通过其他对象获取数据,这些属性是否会占用任何内存?
自动属性自然会发生,因为它只是语法糖,但它似乎不像普通的属性......
答案 0 :(得分:9)
在这方面,属性就像普通方法一样。
代码需要存储在某个地方(每个类型一次),并且每个实例都需要存储任何使用的字段(自动属性!)。局部变量也会占用一些内存。
答案 1 :(得分:4)
直接来自 Apress Illustrated C#
Unlike a field, however, a property is a function member.
- It does not allocate memory for data storage!
答案 2 :(得分:1)
不,属性只是getter和setter方法的语法糖。只有后备字段占用内存。如果没有后备字段,则不会使用每个实例的内存。
答案 3 :(得分:0)
如果您通过实例reflector查看已编译的C#类,您将看到编译器实际上将属性转换为get和set方法,auto属性被转换为带有支持字段的get和set方法,因此该领域将占用与常规领域相同的空间
答案 4 :(得分:0)
属性被转换为两个(或者只有一个,如果你只提供一个getter或者一个setter)方法
public int MyProp
{
get { return 1; }
set { myField = value; }
}
在编译期间被翻译(可能是Eric Lipper将在此处纠正我,因为可能是在预处理阶段或某些时候)进入方法
public int Get_MyProp();
public int Set_MyProp(int value);
总而言之,除了对象中的其他方法
之外,它们不会带来任何其他开销