Nope. The generally accepted practice, as the MSDN doc points out, is
to use the Equals() method call in place of an == comparison, at least
for reference types.
I'm in exactly the situation you are: I have lots of data objects that
have unique IDs of one kind or another, and for which some properties
are mutable. In my classes, the Equals method does an identity
comparison. That is, if the two CatId's are the same, then the method
returns true, even if other fields are different. In the rare situation
in which I need a deep comparison, I write another routine to do that.
I never use the == comparison, because that compares references.
I tried overriding the == operator but quickly got complaints from
FxCop (if you don't currently use it, it's a wonderful way to stay in
synch with Microsoft standards) about doing that, so I did some digging
and found (I think) the same MSDN page you did, so I removed my ==
overrides and chose to use .Equals() instead.
As I said in another thread recently, I went one step farther and had
each object implement an IKeyed interface that specified a PrimaryKey
attribute. That way each object knows its own primary key and it's much
easier to work with them in a generic fashion. However, that's fodder
for another discussion.
My understanding of == is that the idiom typically isn't used for
reference types. == is assumed by most .NET programmers to be a value
comparison, which for a reference type means comparing reference values
(aka pointers). For reference types you typically compare using
..Equals(), which tells the reader that object fields are being
compared, not just references.
Overriding == also comes with the penalty that you can't take
meaningful advantage of inheritence: you're practically damning
yourself to writing a comparison routine for every new class you build.
Yes, you can take advantage of automatic coercions up the class
hierarchy, but it's not as powerful as overriding the Equals method and
the resulting polymorphic behaviour you get. Maybe that's one of the
reasons that MS doesn't recommend overriding ==.