我有一个基类:
abstract class foo(){
abstract dynamic DefaultValue { get; }
}
我希望能够从多个对象继承它并设置默认值:
class bar : foo{
override dynamic DefaultValue { get { return 0.0f; } }
}
这将如何在记忆中表现出来?每个对象是否会存储自己的“DefaultValue”,或者它只会存储在内存中一次,每个对象都会引用它?
答案 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>();