【发布时间】:2019-12-12 17:32:34
【问题描述】:
我刚刚找到一个同事创建的名为 HmeRevisionTracker 的类。它只包含一个简单对象的 List。 CSimCharge 是该项目中最重要的类之一,它包含一个 HmeRevisionTracker 对象作为公共属性,声明如下:
public HmeRevisionTracker RevisionTracker { get; private set; }
没有理由不能在 CSimCharge 构造函数中创建对象,因为 HmeRevisionTracker 是完全硬编码的,不会改变它。但它不是在那里创建的。相反,它被初始化为 jull。在使用之前不会创建它:
void CheckForHeatModelRevision()
{
// Find the next revision that needs to be performed
if (RevisionTracker == null && UseModel)
RevisionTracker = new HmeRevisionTracker(ActualBase.CoilLoad, ActualBase.IsHeating);
据我所知,这没有问题,但我很好奇。这段代码有什么我不知道的缺点吗?
实现对于这个问题应该无关紧要,但无论如何这里有一些:
public class HmeRevisionRule
{
public double CheckPointThreshold { get; private set; }
public bool RevisionNeeded { get; set; }
public bool IsHeatingRule { get; private set; }
public bool IsCoolingRule { get { return !IsHeatingRule; } }
public HmeRevisionRule(double threshold, bool isHeatingRule)
{
CheckPointThreshold = threshold;
RevisionNeeded = true;
IsHeatingRule = isHeatingRule;
}
}
public class HmeRevisionTracker
{
public LinkedList<HmeRevisionRule> CheckPointRules { get; private set; }
public HmeRevisionTracker(CSimCoilGroup coilLoad, bool isHeating)
{
CheckPointRules = new LinkedList<HmeRevisionRule>();
// Default Heating & Cooling Check Points
CheckPointRules.AddLast(new HmeRevisionRule(1.0 / 2.0, true));
CheckPointRules.AddLast(new HmeRevisionRule(3.0 / 4.0, true));
CheckPointRules.AddLast(new HmeRevisionRule(7.0 / 8.0, true));
CheckPointRules.AddLast(new HmeRevisionRule(15.0 / 16.0, true));
CheckPointRules.AddLast(new HmeRevisionRule(63.0 / 64.0, true));
CheckPointRules.AddLast(new HmeRevisionRule(1.0 / 2.0, false));
CheckPointRules.AddLast(new HmeRevisionRule(3.0 / 4.0, false));
CheckPointRules.AddLast(new HmeRevisionRule(7.0 / 8.0, false));
CheckPointRules.AddLast(new HmeRevisionRule(15.0 / 16.0, false));
CheckPointRules.AddLast(new HmeRevisionRule(63.0 / 64.0, false));
Initialize(coilLoad, isHeating);
}
初始化根据充电状态设置单独的规则。该类的其他方法检索所需的规则或更改规则的设置。
【问题讨论】:
标签: c# initialization lazy-initialization