HiveBrain v1.2.0
Get Started
← Back to all entries
patterncsharpCritical

Order of items in classes: Fields, Properties, Constructors, Methods

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
methodspropertiesorderitemsconstructorsfieldsclasses

Problem

Is there an official C# guideline for the order of items in terms of class structure?

Does it go:

  • Public Fields



  • Private Fields



  • Properties



  • Constructors



  • Methods



?

I'm curious if there is a hard and fast rule about the order of items? I'm kind of all over the place. I want to stick with a particular standard so I can do it everywhere.

Solution

According to the StyleCop Rules Documentation the ordering is as follows.

Within a class, struct or interface: (SA1201 and SA1203)

  • Constant Fields



  • Fields



  • Constructors



  • Finalizers (Destructors)



  • Delegates



  • Events



  • Enums



  • Interfaces (interface implementations)



  • Properties



  • Indexers



  • Methods



  • Structs



  • Classes



Within each of these groups order by access: (SA1202)

  • public



  • internal



  • protected internal



  • protected



  • private protected



  • private



Within each of the access groups, order by static, then non-static: (SA1204)

  • static



  • non-static



Within each of the static/non-static groups of fields, order by readonly, then non-readonly : (SA1214 and SA1215)

  • readonly



  • non-readonly



An unrolled list is 130 lines long, so I won't unroll it here. The methods part unrolled is:

  • public static methods



  • public methods



  • internal static methods



  • internal methods



  • protected internal static methods



  • protected internal methods



  • protected static methods



  • protected methods



  • private static methods



  • private methods



The documentation notes that if the prescribed order isn't suitable - say, multiple interfaces are being implemented, and the interface methods and properties should be grouped together - then use a partial class to group the related methods and properties together.

Context

Stack Overflow Q#150479, score: 1318

Revisions (0)

No revisions yet.