The underscore can be seen as a form of hungarian notation*
, but the prefix is a "magical character" instead of something that has a meaning.
If you want something that says more about what the prefix is for, you would use a prefix like member
or mbr
or m
. Sometimes the prefix m_
is used, but then the underscore is used as a separator rather than a part of the prefix, and the naming recommendations for .NET says that it shouldn't be used as a separator.
Personally I have come to like the underscore for member variables, eventhough it's a prefix with a hidden meaning. It doesn't clutter up the names as much as any other prefix would.
And as always, it's more important to pick a standard and stick to it, than which standard it is that you actually pick.
*
Hungarian notaition has mostly come to be used to specify data type in weakly typed languages like VBScript, but the original intention was to specify other properties of variables, so using it for member variables is more along the original intentions.