Правильный порядок членов класса друг относительно друга

В каком порядке в классе следует размещать поля, свойства, конструкторы и прочее? Пробовал найти ответ здесь и на Learn.Microsoft, но не нашел, поэтому обратился к чату GPT, который предложил следующий порядок:

using System;
using System.Runtime.InteropServices;

/// <summary>
/// Класс ExampleClass демонстрирует порядок расположения всех членов, включая поля, константы, инициализаторы,
/// свойства, события, методы, реализации интерфейсов, вложенные классы и деструктор.
/// </summary>
public class ExampleClass
{
    // Вложенные классы
    public class NestedClass
    {
        // Код вложенного класса
    }

    // Константы и статические поля
    public const int PublicConstValue = 10; // Публичная константа
    private const int PrivateConstValue = 5; // Приватная константа
    private static readonly int StaticReadonlyField = 15; // Статическое поле readonly
    private static int StaticPrivateField; // Приватное статическое поле

    // Поля
    public readonly int ReadOnlyField; // Поле только для чтения
    private int privateField; // Приватное поле
    public int PublicField; // Публичное поле

    // Статический инициализатор
    static ExampleClass()
    {
        StaticPrivateField = 20; // Инициализация статического поля
    }

    // Инициализаторы экземпляра
    public ExampleClass()
    {
        ReadOnlyField = 25; // Инициализация поля readonly в конструкторе
        privateField = 30; // Инициализация приватного поля
    }

    // Свойства
    public static int PublicStaticProperty { get; set; } // Публичное статическое свойство
    protected static int ProtectedStaticProperty { get; private set; } // Защищенное статическое свойство
    private static int PrivateStaticProperty { get; set; } // Приватное статическое свойство

    public int PublicProperty { get; set; } // Публичное свойство
    protected int ProtectedProperty { get; set; } // Защищенное свойство
    private int PrivateProperty { get; set; } // Приватное свойство

    // События
    public static event EventHandler PublicStaticEvent; // Публичное статическое событие
    private static event EventHandler PrivateStaticEvent; // Приватное статическое событие

    public event EventHandler PublicEvent; // Публичное событие
    private event EventHandler PrivateEvent; // Приватное событие

    // Методы
    public static void PublicStaticMethod()
    {
        // Код публичного статического метода
    }

    protected static void ProtectedStaticMethod()
    {
        // Код защищенного статического метода
    }

    private static void PrivateStaticMethod()
    {
        // Код приватного статического метода
    }

    public void PublicMethod()
    {
        // Код публичного метода
    }

    protected void ProtectedMethod()
    {
        // Код защищенного метода
    }

    private void PrivateMethod()
    {
        // Код приватного метода
    }

    // Импорт методов WinAPI
    [DllImport("user32.dll")]
    private static extern int ShowScrollBar(IntPtr hWnd, int wBar, int bShow);

    // Реализация интерфейса
    public interface IExampleInterface
    {
        void InterfaceMethod();
    }

    // Явная реализация интерфейса
    void IExampleInterface.InterfaceMethod()
    {
        // Код интерфейсного метода
    }

    // Деструктор (для очистки ресурсов)
    ~ExampleClass()
    {
        // Код деструктора для освобождения ресурсов
    }
}

Прошу знающих людей высказаться по поводу предложенного порядка - он корректен, или есть ошибки?


Ответы (1 шт):

Автор решения: Alexander Petrov

Книга Framework Design Guidelines, третье издание.

Приложение A.4 FILE ORGANIZATION.

DO group members into the following sections in the specified order:

All const fields
All static fields
All instance fields
All auto-implemented static properties
All auto-implemented instance properties
All constructors
Remaining members
All nested types

CONSIDER grouping the remaining members into the following sections in the specified order:

Public and protected properties
Methods
Events
All explicit interface implementations
Internal members
Private members

→ Ссылка