Properties是否会增加Instances的内存大小?

时间:2010-11-19 09:21:50

标签: c# memory-management

这可能是一个愚蠢的问题,但对象属性是否会占用每个实例的任何内存?

正如我在实例化对象时所理解的那样,每个值字段占用其大小,引用字段类型为每个字段4个字节。但是假设你有一个具有1000个属性的对象,这些属性通过其他对象获取数据,这些属性是否会占用任何内存?

自动属性自然会发生,因为它只是语法糖,但它似乎不像普通的属性......

5 个答案:

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

总而言之,除了对象中的其他方法

之外,它们不会带来任何其他开销