Nom*_*Sim 2 c# coding-style conventions
是否存在使用属性来计算通话值的约定?例如,如果我的类包含一个整数列表,并且我有一个属性Average,那么当从列表中添加/删除/修改整数时,平均值可能会发生变化,这样做会是这样的:
private int? _ave = null;
public int Average
{
get
{
if (_ave == null )
{
double accum = 0;
foreach (int i in myList)
{
accum += i;
}
_ave = accum / myList.Count;
return (int)_ave;
}
else
{
return (int)_ave;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果以可能改变平均值的方式修改myList,则将_ave设置为null
对平均方法调用有任何常规优势/劣势吗?
我基本上只是想知道这个约定是什么,因为我正在创建一个具有可能只计算一次的特定属性的类.我喜欢访问这些属性的类的想法,以便能够访问属性与方法(因为它似乎更可读IMO,将平均值视为属性而不是方法),但我可以看到这里可能会有问题,特别是在确保_ave被适当地设置为null时.
Eri*_*ert 12
惯例是:
在您的具体情况下,它是临界的.您第一次执行可能很长的操作然后缓存结果,因此即使最坏情况时间很慢,分摊的时间也可能非常快.你正在以一种非破坏性的方式改变状态.看起来你可以将它描述为集合的属性而不是集合的"能力".我个人倾向于把它作为一种方法,但如果你有充分的理由将其作为财产,我不会非常努力.
关于你的具体实现:我更倾向于使用64位整数作为累加器而不是64位双精度; 与长整数的64位相比,double只有53位的整数精度.