团队正在详细讨论我们如何处理一个相当大的Account
对象。
我们不希望必须初始化构造函数中的每个属性,因为这可能会导致过多的开销,因为该属性可能永远不会在该网页上使用。所以我们想出了以下内容。
public partial class Account
{
private bool? projEcho;
public bool ProjectEcho
{
get
{
if (!projEcho.HasValue)
{
projEcho = isProjectEcho();
return (bool)projEcho;
}
else
{
return (bool)projEcho;
}
}
}
}
这样,如果某人正在使用Account对象,并且需要访问该属性,则内部会发生setter。我们不是这种转换技术的忠实粉丝,但它是确保在代码运行时我们具有true / false值的唯一方法。看起来这种方法有问题,但它似乎是仅在我们需要时才填充属性的最有效方式。
我的问题是:“从开发标准的角度来看,是否有更好的替代方案来实现我们想要实现的目标?”
答案 0 :(得分:1)
这个概念没什么问题 - 懒惰的初始化。
您将属性的支持字段保留为null,并在首次使用时为其指定值。 你不需要将可空的bool转换为bool,你可以使用Nullable.Value。
private bool? projEcho;
public bool ProjectEcho
{ get
{
if (!projEcho.HasValue)
projEcho = isProjectEcho();
return projEcho.Value;
}
}
对我来说似乎更好。 .NET中还支持延迟初始化:
https://msdn.microsoft.com/en-us/library/dd997286(v=vs.110).aspx
但我个人并没有太多使用它。