Visual Basic .NET中的自动调优属性

问题描述:

我是一名初学VB.NET程序员,我试图用两个成员实现一个类Principal,这两个成员是两个不同类的实例。Visual Basic .NET中的自动调优属性

由于我学习如何使用事件和委托我想实现一个事件(如果这可能是一个解决我的问题)来更新objeto2._atributoC21当值分配给objeto1.atributoC11,然后用总和更新Principal.totalobject1object2的所有成员。

这里是一个非常粗鲁的代码,但使这个例子明确的,因为这将是可能的:

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