3

こんにちは、

私はしばらくの間プログラマーですが、基本的なことに疑問を持っています。次の点を明確にしていただけますか: ケース 1:

Public Class BillItems
        Implements INotifyPropertyChanged
        Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
        Private Sub NotifyPropertyChanged(ByVal info As String)
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
        End Sub

        Private _BillIdValue As String


        Property BillId As String
            Get
                Return _BillIdValue
            End Get
            Set(ByVal value As String)
                If Not _BillIdValue = value Then
                    _BillIdValue = value
                End If
            End Set
        End Property
End Class

ケース 2:

Public Class BillItems
        Implements INotifyPropertyChanged
        Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
        Private Sub NotifyPropertyChanged(ByVal info As String)
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
        End Sub


        Property BillId As String
            Get
                Return BillId
            End Get
            Set(ByVal value As String)
                If Not BillId = value Then
                    BillId = value
                End If
            End Set
        End Property
End Case

ケース 1 とケース 2 は同じ結果をもたらしますか? つまり、プライベートな値が必ずそこにあるということですか? プロパティ自体を使用して、その Set ステートメントと get ステートメントで独自の値を使用できますか?

ありがとうございました。

4

2 に答える 2

4

ケース 2 がスタック オーバーフロー例外を発生させずに実行されるとは想像できません。基本的に、常に自分自身を呼び出す無限ループを作成しています。

ケース1はそれを行う正しい方法です。

.Net 4 を使用している場合は、これを実行できます (追加の Get/Set コードは必要ありません)。

Property BillId As String

これにより、プライベート メンバー変数 ( _BillId) が生成されます。

編集:

これを試してイベントを発生させることができます:

Property BillId As String
    Get
        Return _BillIdValue
    End Get
    Set(ByVal value As String)
        If Not _BillIdValue = value Then
            _BillIdValue = value
            NotifyPropertyChanged("BillId")
        End If
    End Set
End Property
于 2012-05-04T08:01:15.780 に答える
3

自動実装プロパティに関する MSDN のこの記事では、プロパティには標準の構文が必要であることがわかります。

Add code to the Get or Set procedure of a property, such as code to validate incoming values in the Set procedure. For example, you might want to verify that a string that represents a telephone number contains the required number of numerals before setting the property value.

したがって、IPropertyChanged インターフェイスを実装するため、setter にコードを追加する必要があります。
と、こんなことを書きます。

Property BillId As String               
    Get       
       Return _BillIdValue               
   End Get               
   Set(ByVal value As String)                   
        If Not _BillIdValue = value Then                       
            _BillIdValue = value                   
            NotifyPropertyChanged("BillID")
        End If               
   End Set           
End Property   

2 番目のケースは明らかに間違っています。(他の誰かがすでに言ったように無限ループ)

于 2012-05-04T08:15:14.460 に答える