Skip to content
Eduardo Pignatelli edited this page Mar 26, 2019 · 7 revisions

General standards: tour of C#

Our coding style generally follows the Microsoft guidelines:

https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/

https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/classes-and-objects

https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/types-and-variables

Although, to guarantee a high level of clarity and transparency, we also follow some additional rules.


Filenames, objects and methods

  • A .cs file can contain only 1 (one) class, and there is no concept as a Helper or Utils class.
  • The name of the .cs file is the Name (excluding the namespace) of the class, e.g. the Line class is in the Line.cs file
  • For methods, a file can only contain methods whose name is the same as their file, e.g. Flip(Line line) and Flip(Arc arc) are in the same file Flip.cs. As a corollary, RandomFlip cannot lie in the Flip.cs file, and must have a RandomFlip.cs file by its own.

Folders and namespaces

Namespaces and the folder structure that contains the .cs files have a close relationship. To define the correct folder structure helps keeping the relationship with the namespaces. This, in turn enables additional functionalities, such as deriving the web address of the source code of a method.

For a class, an Attribute, and Enum, an Interface, the folder structure respects the following rules:

  • If a file is in a sub folder, the namespace of the entity must follow: if Bar is in a sub folder Elements, its namespace must suffix the Elements word BH.oM.Structure.Elements.

  • An Enum must be in a separate folder Enums. Although, the namespace remains unchanged. For example BarFEAType is in the sub folder Elements, and it is an enum. Its namespace respects A., so it contains the Elements word, but does not contain the Enum word: BH.oM.Structure.Elements. Although, since it is an Enum it is in an Enums folder.

  • The same rule as B. applies to:

    • Attribute => Attributes
    • interface => Interfaces
Clone this wiki locally