【问题标题】:Autoupdatable properties in Visual Basic .NETVisual Basic .NET 中的自动更新属性
【发布时间】:2013-02-12 09:28:06
【问题描述】:

我是一个初学者 VB.NET 程序员,我正在尝试实现一个类 Principal,它有两个成员,它们是两个不同类的实例。

当我正在学习如何使用事件和委托时,我想实现一个事件(如果这可以解决我的问题)在将值分配给objeto1.atributoC11 时更新objeto2._atributoC21,然后更新@987654324 @ 与 object1object2 的所有成员的总和。

这是一个非常粗鲁的代码,但为了使这个示例尽可能清晰:

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 类,但在这种情况下,我该如何实施合适的解决方案?

【问题讨论】:

    标签: vb.net events properties delegates auto-update


    【解决方案1】:

    没有自动的内置方式来做这种事情。如果你想这样做,你将需要自己实施管道。执行此操作的标准方法是让“子”类(如果您愿意的话)实现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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      相关资源
      最近更新 更多