public ResultType GetResult(bool hypothetical = false) { checkProducer.ProduceCheck(this); dcProducer.ProduceDcInCheck(this); ResultType ret = ResultType.FAILURE; if (!hypothetical) { checkProducer.AboutToResolveCheck(this); dcProducer.AboutToResolveDcInCheck(this); ret = CalculateResult(checkValue, DC); checkProducer.DidResolveCheck(this); dcProducer.DidResolveDcInCheck(this); } return(ret); }