C# 属性是否会增加实例的内存大小?

C# 属性是否会增加实例的内存大小?,c#,memory-management,C#,Memory Management,这可能是一个愚蠢的问题,但对象属性是否会占用每个实例的内存 正如我所理解的,当您实例化一个对象时,每个值字段占用其大小,引用字段类型为每个字段4字节。但是假设您有一个具有1000个属性的对象,该对象通过其他对象获取数据,那么这些属性本身是否占用内存 自动属性自然会这样做,因为它只是语法上的糖分,但似乎普通属性不应该…在这方面,属性就像普通方法一样 代码需要存储在某个地方(每种类型一次),使用的任何字段(自动属性!)都需要存储在每个实例中。局部变量也会占用一些内存。不,属性只是getter和set

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

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


自动属性自然会这样做,因为它只是语法上的糖分,但似乎普通属性不应该…

在这方面,属性就像普通方法一样


代码需要存储在某个地方(每种类型一次),使用的任何字段(自动属性!)都需要存储在每个实例中。局部变量也会占用一些内存。

不,属性只是getter和setter方法的语法糖。只有支持字段占用内存。如果没有支持字段,则不会使用每个实例的内存。

如果通过实例查看已编译的C#类,您将看到编译器实际上将属性转换为get和set方法,自动属性转换为带有支持字段的get和set方法,因此,该字段将占用与常规字段一样多的空间,直接从按C#


属性被转换为两个(或者在您只提供了getter或setter的情况下仅转换为一个)方法

public int MyProp
{
    get { return 1; }
    set { myField = value; }
}
在编译期间(可能Eric Lipper会纠正我,因为可能是在预处理阶段或其他阶段)转换为方法

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

总的来说,除了对象中引入的附加方法之外,它们没有其他开销。这是有意义的,只是需要确保。代理对象ftw:)我想你是第一个
public int Get_MyProp();
public int Set_MyProp(int value);