C#::lockステートメントについて

lockステートメントの内容物としてthis、Typeのインスタンス、文字列リテラルは指定してはいけないことになっています。

http://msdn.microsoft.com/ja-jp/library/c5kehkcz%28v=vs.80%29.aspx

そのリソースを扱うクラス(通常はひとつのはず!)以外がアクセスできる可能性のあるオブジェクトを入れるな、と言うわけですが、このガイドライン、実際のところ守らなくてもほとんど影響がないのであんまり守られてない気がするよねぇ・・・。
コレクションを同期化するぐらいなら、内部コレクションをlockするけど、それ以外だと面倒だからthisでいいやってなりがち。


しかしEqualsをオーバーライドしたらGetHashCodeをオーバーライドしろとパフォーマンスにしか影響の出ないことを小姑のように警告してくる割には、実際にわずかでも不具合になる可能性をはらんでいるこの件を警告してくれないのはどうにも不親切というか片手落ちだよねぇ。