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.