The Generic Rules
In this lesson, we will go through some of the generic rules we should follow in C#.
C# is a general-purpose, strongly typed, object-oriented programming language. Let’s quickly go through some of the generic rules one should follow while coding in C#.
The Do’s and Don’ts
- Do use PascalCasing for class names and method names:
Why: consistent with the Microsoft’s .NET Framework and easy to read.
- Do use camelCasing for method arguments and local variables:
Why: consistent with the Microsoft’s .NET Framework and easy to read.
- Do not use Hungarian notation or any other type identification in identifiers
Why: consistent with the Microsoft’s .NET Framework. In general you want to avoid type indicators in any identifier.
- Do not use Screaming Caps for constants or readonly variables:
Why: consistent with the Microsoft’s .NET Framework. Caps grab too much attention.
- Do use meaningful names for variables. The following example uses seattleCustomers for customers who are located in Seattle:
Why: consistent with the Microsoft’s .NET Framework and easy to read.
- Avoid using Abbreviations. Exceptions: abbreviations commonly used as names, such as Id, Xml, Ftp, Uri.
Why: consistent with the Microsoft’s .NET Framework and prevents inconsistent abbreviations.
- Do use PascalCasing for abbreviations 3 characters or more (2 chars are both uppercase):
Why: consistent with the Microsoft’s .NET Framework. Caps would grab visually too much attention.
- Do not use Underscores in identifiers. Exception: you can prefix private fields with an underscore:
Why: consistent with the Microsoft’s .NET Framework and makes code more natural to read (without ‘slur’). Also avoids underline stress (inability to see underline).
- Do use predefined type names (C# aliases) like
int,float,stringfor local, parameter and member declarations. Do use .NET Framework names like Int32, Single, String when accessing the type’s static members likeInt32.TryParseorString.Join.
Why: consistent with the Microsoft’s .NET Framework and makes code more natural to read.
- Do use implicit type
varfor local variable declarations. Exception: primitive types (int,string,double, etc) use predefined names.
Why: removes clutter, particularly with complex generic types.
- Do use noun or noun phrases to name a class.
Why: consistent with the Microsoft’s .NET Framework and easy to remember.
- Do prefix interfaces with the letter
I. Interface names are noun (phrases) or adjectives.
Why: consistent with the Microsoft’s .NET Framework.
- Do name source files according to their main classes. Exception: file names with partial classes reflect their source or purpose, e.g. designer, generated, etc.
Why: consistent with the Microsoft practices. Files are alphabetically sorted and partial classes remain adjacent.
- Do organize namespaces with a clearly defined structure:
Why: consistent with the Microsoft’s .NET Framework. Maintains good organization of your code base.
- Do vertically align curly brackets:
Why: Microsoft has a different standard, but developers have overwhelmingly preferred vertically aligned brackets.
- Do declare all member variables at the top of a class, with static variables at the very top.
Why: generally accepted practice that prevents the need to hunt for variable declarations.
- Do use singular names for enums. Exception: bit field enums.
Why: consistent with the Microsoft’s .NET Framework and makes the code more natural to read. Plural flags because enum can hold multiple values (using bitwise ‘OR’).
- Do not explicitly specify a type of an enum or values of enums (except bit fields):
Why: can create confusion when relying on actual types and values.
- Do not use an “Enum” suffix in enum type names:
Why: consistent with the Microsoft’s .NET Framework and consistent with prior rule of no type indicators in identifiers.
- Do not use “Flag” or “Flags” suffixes in enum type names:
Why: consistent with the Microsoft’s .NET Framework and consistent with prior rule of no type indicators in identifiers.
- Do use suffix EventArgs at creation of the new classes comprising the information on event:
Why: consistent with the Microsoft’s .NET Framework and easy to read.
- Do name event handlers (delegates used as types of events) with the “EventHandler” suffix, as shown in the following example:
Why: consistent with the Microsoft’s .NET Framework and easy to read.
- Do not create names of parameters in methods (or constructors) which differ only by the register:
Why: consistent with the Microsoft’s .NET Framework and easy to read, and also excludes possibility of occurrence of conflict situations.
- DO use two parameters named sender and e in event handlers. The sender parameter represents the object that raised the event. The sender parameter is typically of type object, even if it is possible to employ a more specific type.
Why: consistent with the Microsoft’s .NET Framework