Visual Basic .NET中的自动调优属性
问题描述:
我是一名初学VB.NET程序员,我试图用两个成员实现一个类Principal
,这两个成员是两个不同类的实例。Visual Basic .NET中的自动调优属性
由于我学习如何使用事件和委托我想实现一个事件(如果这可能是一个解决我的问题)来更新objeto2._atributoC21
当值分配给objeto1.atributoC11
,然后用总和更新Principal.total
object1
和object2
的所有成员。
这里是一个非常粗鲁的代码,但使这个例子明确的,因为这将是可能的:
Public Class Principal
Public objeto1 As ClaseIncluida1
Public objeto2 As ClaseIncluida2
Public total As Integer
End Class
Public Class ClaseIncluida1
Private _atributoC11 As Integer
Public _atributoC12 As Integer
Public Property atributoC11 As Integer
Get
Return _atributoC11
End Get
Set(ByVal value As Integer)
_atributoC11 = value
End Set
End Property
End Class
Public Class ClaseIncluida2
Public _atributoC21 As Integer
Public _atributoC22 As Integer
End Class
我知道如何使用事件和委托以简单的方式,但是当我试图做什么我上面已经描述过,我发现自己陷入死胡同。
也许事件和代表不适合Principal
类,但在这种情况下,我该如何实现一个合适的解决方案?
答
有没有自动内置的方式做这种事情。如果你想这样做,你需要自己实施管道。标准的做法是通过让“孩子”班,如果你愿意,实现INotifyPropertyChanged接口。然后,“父母”班级可以收听他们的PropertyChanged
事件。当任何一个子对象引发该事件时,父对象可以适当地处理它。在你的情况下,你想要通过更新total
来处理它。例如:
Public Class Principal
Public WithEvents objeto1 As ClaseIncluida1
Public WithEvents objeto2 As ClaseIncluida2
Public total As Integer
Private Sub PropertyChangedHandler(sender As Object, e As PropertyChangedEventArgs) Handles objeto1.PropertyChanged, objeto2.PropertyChanged
total = ...
End Sub
End Class
Public Class ClaseIncluida1
Implements INotifyPropertyChanged
Private _atributoC11 As Integer
Public _atributoC12 As Integer
Public Property atributoC11 As Integer
Get
Return _atributoC11
End Get
Set(ByVal value As Integer)
_atributoC11 = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("atributoC11"))
End Set
End Property
Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
End Class
Public Class ClaseIncluida2
Implements INotifyPropertyChanged
Public _atributoC21 As Integer
Public _atributoC22 As Integer
'Implement raising event when properties change
Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
End Class