I know about that... But not even Microsoft is following it in the .NET Framework. And what I do is to follow these guidelines.
Look at this example:
class Foo
{
private string foo;
public void SetFoo(string foo)
{
this.foo = foo;
}
}
It's a show example, without real meaning, but demonstrates what I mean. In this case the foo argument is overlapping the foo class member. Which isn't very funny. It leads to bugs that are hard to find! I had to add this to make C# understand that the foo I'm referencing to is the class member foo and not the argument.
At the company I used to work for we always had the opinion to follow 90% of the official coding guidelines. Class field naming was not in that 90%, because even Microsoft didn't do it...