私はここでポーズされた質問を見た:Have I implemented Equals()/GetHashCode() correctly?しかし、私のC#は強力ではなく、私はIEquatableに慣れていないので、私は可能な限りVB.NETでこれを見たいと思っています。IEquatableを正しく実装しましたか?私は常にGetHashCodeをオーバーライドする必要がありますか?
私のサンプルコード(私はそこに着くときに、クラスは、最終的にINotifyPropertyChangedのを使用します):
Public Class Car
Implements ICloneable
Implements IEquatable(Of Car)
Public Property Make() As String
Get
Return m_Make
End Get
Set(ByVal value As String)
m_Make = value
End Set
End Property
Private m_Make As String
Public Property Model() As String
Get
Return m_Model
End Get
Set(ByVal value As String)
m_Model = value
End Set
End Property
Private m_Model As String
Public Function Clone() As Object Implements System.ICloneable.Clone
Return New Car() With { _
.Make = Me.Make, _
.Model = Me.Model _
}
End Function
Public Overloads Function Equals(ByVal other As Car) As Boolean Implements System.IEquatable(Of Car).Equals
Return other.Make = Me.Make AndAlso other.Model = Me.Model
End Function
End Class
おかげで、
私はリポジトリパターンを実装できるようにIEquatableを実装しています。ハッシュコードは、同じプロパティを持つ2つのオブジェクトの問題をどのように解決しますか?また、なぜ "何かインテリジェントな"コメント?申し訳ありませんが、私は少し高密度から出てくる。 ChangeTrackerからEqualsが使用されています:https://gist.github.com/2065076 –
ハッシュコードを実装する方法はいろいろあります。 179と27は私が選んだ数字です。重要な部分は、ハッシュコードがあなたのEqualsオーバーライドのようにMakeとModelに基づいていることに気づくことです。 – Jeff
私はあなたのChangeTrackerを参照してください...しかし、私はあなたがすでにObject.Equalsをオーバーライドする必要があるということを言おうとしているので、IEquatableも実装する必要はありません。 – Jeff