1

私は初心者の VB.NET プログラマーでPrincipal、2 つの異なるクラスのインスタンスである 2 つのメンバーを持つクラスを実装しようとしています。

イベントとデリゲートの使用方法を学習しているので、イベントを実装して (これが問題の解決策になる場合) 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クラスに適していない可能性がありますが、その場合、適切なソリューションをどのように実装できますか?

4

1 に答える 1

0

そのようなことを行うための自動組み込みの方法はありません。それを行いたい場合は、配管を自分で実装する必要があります。これを行う標準的な方法は、必要に応じて「子」クラスに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
于 2013-02-26T19:28:24.690 に答える