title: Have implemented IEquatable correctly? Should I always override GetHashCode?
body: <p>I saw the question posed here: <a href="https://stackoverflow.com/questions/5700099/have-i-implemented-equals-gethashcode-correctly">Have I implemented Equals()/GetHashCode() correctly?</a> but my c# is not as strong, and I am unfimiliar with IEquatable enough that I would like to see this in VB.NET if possible please.</p>
  
  <p>My example code (The class will eventually use INotifyPropertyChanged when I get there):</p>
  
  <pre><code>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
  </code></pre>
  
  <p>Thanks,</p>