I personally use them dependant on scope. For example:
Code:
class foo
{
private string m_sFoo = String.Empty;
public string Foo
{ get { return this.m_sFoo; } set { this.m_sFoo = value; } }
public string SayHello
{
string _sHello = "Hello " + m_sFoo;
}
}
I go with this method for two reasons:
1) It allows me to easily tell at a glance the scope of the variable (a "_" means method-level, a "m_" means class-level)
2) I also use the Hungarian notation identifier after the "_" so I can easily identify what data type I'm working with ("s" for string, "b" for boolean, "i" for integer, etc.)
Although this is my personal preference (and no, my team at work doesn't completely implement this

), you'll find arguments against it too:
I think it all boils down to personal preference, what you're most comfortable with. If you're in a team environment, make sure that everyone on the team uses the same notation standard. Otherwise, code can end up pretty ugly (if it's not already)
-----------------------------------------------
"The night sky over the planet Krikkit is the least interesting sight in the entire universe."
-Hitch Hiker's Guide To The Galaxy