title: Overloading operator== versus Equals()
body: <p>I'm working on a C# project on which, until now, I've used immutable objects and factories to ensure that objects of type <code>Foo</code> can always be compared for equality with <code>==</code>. </p>
  
  <p><code>Foo</code> objects can't be changed once created, and the factory always returns the same object for a given set of arguments. This works great, and throughout the code base we assume that <code>==</code> always works for checking equality.</p>
  
  <p>Now I need to add some functionality that introduces an edge case for which this won't always work. The easiest thing to do is to overload <code>operator ==</code> for that type, so that none of the other code in the project needs to change. But this strikes me as a code smell: overloading <code>operator ==</code> and not <code>Equals</code> just seems weird, and I'm used to the convention that <code>==</code> checks reference equality, and <code>Equals</code> checks object equality (or whatever the term is).</p>
  
  <p>Is this a legitimate concern, or should I just go ahead and overload <code>operator ==</code>?</p>