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...