Microsoft has an excellent set of guidelines on class library design, including a section on naming. In short (examples in parentheses):
- Classes/Structs: PascalCase (
WebRequest) - Interfaces: PascalCase with I prefix (
IDisposable) - Methods: PascalCase (
ToUpper) - Properties: PascalCase (
Length) - Events: PascalCase (
Click) - Namespaces: PascalCase (
System.Collections; unusual to have two words in one part though) - Non-constant variables including parameters: camelCased (
keySelector) - Constants: PascalCase (
Int32.MaxValue) - Enums: PascalCase, singular for non-flags and plural for flags (
HttpStatusCode,BindingFlags) - Attributes: PascalCase with “Attribute” suffix (
ThreadStaticAttribute)
Private names are up to you, but I tend to follow the same conventions as for everything else. Hungarian notation (in the style of Win32) is discouraged, although many places use “m_” or “_” as a prefix for instance variables.