我有一个从TStringGrid派生的控件。 在创建过程中,我想访问Cancas进行一次初始化。 我无法在Create中执行此操作,因为Canvas还没有准备好。我也无法在CreateWnd中执行此操作,因为CreateWnd会多次调用它。
有一些廉价的技巧(使用布尔变量)只能初始化该var一次,但我想知道如何以“好方法”做到这一点。 因此,由于Create和CreateWnd不是一个好地方,在创建控件的过程中,我只能初始化var一次。
答案 0 :(得分:2)
简单的答案是你不应该缓存这个值。在需要时计算需求值。
缓存是你应该避免做的事情。缓存的问题是你必须确保你永远不会使用陈旧的值。您需要响应可能导致值更改的任何内容并更新缓存值。
很容易让更新逻辑错误。即使你做对了,你也只是为你的代码增加了一大堆复杂性。如果可能的话,你总是想避免这种情况。在物理字体度量的情况下,与您使用它们相比,它们的价格便宜。您将始终使用字体度量作为绘画代码的一部分。当然,这比获得字体指标要贵许多个数量级。
因此,您可以通过非缓存的非常简单的权宜之计使您的所有问题消失,并在您需要时获取字体指标。无论如何都要用一个getter方法将它包装在一个属性中,以使代码尽可能干净。