Правильный порядок членов класса друг относительно друга
В каком порядке в классе следует размещать поля, свойства, конструкторы и прочее? Пробовал найти ответ здесь и на 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 шт):
Книга 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