【发布时间】:2014-08-20 15:55:09
【问题描述】:
假设我有一个类,它有几个基于计算的属性,甚至可以依赖于共享类成员的存在......举个例子:
Public Class FakeClass
Public Shared Property Needed As FakeObject
Public Property Prop1 as Double
Public Property Prop2 as Double
Public Function Func1() As Double
' Lengthy calculation using some properties, etc
End Function
Public Function Func2() As Double
' Lengthy calculation involving <Func1>, some properties, etc
End Function
Public Function Func3() As Double
' Lengthy calculation involving <Func1> and needing <Needed>
End Function
End Class
并且一个实例化的对象可以在整个代码中被多次调用,所以我不希望每次都重新计算这些值,但是,同时,我也想考虑到代码中某些属性可能已更改的可能性,因此应重新运行方法...
我正在考虑使用以下任何一种方法来做到这一点:
-
对于每个方法,创建一个私有布尔值(例如
_RecalcFunc1)和一个私有双精度值(例如_Func1Val)以使最终方法看起来像:Private _RecalcFunc1 As Boolean = True Private _Func1Val As Double Public Function Func1() As Double If _RecalcFunc1 Then _Func1Val = ' Lengthy calculation _RecalcFunc1 = False End If Return _Func1Val End Function和
Public Shared Property Needed As FakeObject = Nothing Public Function Func3() As Double If Needed Is Nothing Then Throw New InvalidOperationException("The ""Needed"" object is necessary to perform this calculation.") End If ' Lengthy calculation involving <Func1> and needing <Needed> End Function -
我看到有
李>INotifyPropertyChanged接口之类的东西,但这似乎是通知当前对象之外的对象,而且实现起来似乎很昂贵。
是否有标准/正确的方法来做到这一点?或者哪种方法/模式最能考虑到这一点?
此外,即使提供的源代码是 VB,我也同样喜欢 VB/C# 解决方案。
谢谢!!!
【问题讨论】:
-
您可以在属性设置器中设置一个 DataChanged 标志,然后仅在它为 True 时重新计算。
INotifyPropertyChanged通常用于告诉外部方某个 prop 已更改,例如告诉BindingList存储对象的 prop 已更改。 -
谢谢@Plutonix,非常喜欢我的想法#1??
-
除了,你不能使用自动属性
-
是的 - 有道理!! - 谢谢!!!!