C#对象内存表示

时间:2016-07-10 20:11:52

标签: c# object memory

我有一个基类:

abstract class foo(){
     abstract dynamic DefaultValue { get; }
}

我希望能够从多个对象继承它并设置默认值:

class bar : foo{
     override dynamic DefaultValue { get { return 0.0f; } }
}

这将如何在记忆中表现出来?每个对象是否会存储自己的“DefaultValue”,或者它只会存储在内存中一次,每个对象都会引用它?

3 个答案:

答案 0 :(得分:1)

DefaultValue创建一个方法是有意义的:

GetDefaultValue(){ return 0.0f; }

只要方法不为每个对象占用额外的内存。另一方面,声明自动属性将始终创建其他私有字段来保存数据,这将添加到您创建的每个对象上,因此它不具有内存效率。

这确实是一个令人困惑的情况,因为查看this question会发现自动财产会占用更多空间。

但如果你看看Jon Skeet的回答right here,他就是这样说的

  

单个对象的大小不受属性,方法,事件等数量的影响。

在这种情况下,它们可能具有相同的效果,您可以针对大量对象自行测试它,但更确定的是创建一个方法,因为它被方法表中的所有对象引用。

答案 1 :(得分:1)

简短回答 - 每个对象没有额外的内存来存储默认值 只有return语句的只读属性将编译为方法

get_DefaultValue()

答案 2 :(得分:0)

如果是这样,那么我会说它是一个通用的方法,如

public T GetTypedefaultvalue<T>()
{
  return default(T);
}

然后您可以将其称为

GetTypedefaultvalue<double>();

(OR)

GetTypedefaultvalue<string>();