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

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

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

自动属性自然会做,因为它只是语法糖,但它似乎不像普通属性应…

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

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

直接来自Apress Illustrated C#

Unlike a field, however, a property is a function member. - It does not allocate memory for data storage! 

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

如果通过例如reflection器查看已编译的C#类,您将看到编译器实际上将属性转换为get和set方法,auto属性被转换为带有支持字段的get和set方法,因此该字段将占用尽可能多的房间作为常规场地

属性被转换为两个(或者只有一个,如果你只提供了一个getter或者一个setter)方法

 public int MyProp { get { return 1; } set { myField = value; } } 

在编译过程中翻译(可能是Eric Lipper将在此处纠正我,因为可能是在预处理阶段或某些阶段)进入方法

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

总而言之,除了对象中的其他方法之外,它们不会带来任何其他开销