@HEKOT
Embedded

Каков предпочтительный стиль / оформление исходного кода на C#?

Пришёл в C# из C / C++. Хотелось бы понять, как правильно оформлять код на C# Кроме "низкоуровневой" читаемости непосредственно самого кода, интересно, как улучить "высокоуровневую" читаемость, навигацию по файлу, особенно, по partial классам. В C / С++ я использовал .h в качестве Table Of Contents.
  • Вопрос задан
  • 1400 просмотров
Решения вопроса 3
lexxpavlov
@lexxpavlov
Программист, преподаватель
https://docs.microsoft.com/ru-ru/dotnet/csharp/pro...

Для разделения частей программы на логические блоки используют #region, например, отдельный регион для полей и свойств, для публичных и приватных методов, для конструкторов и обработчиков событий. Я часто делаю регион для указания реализации интерфейса.
Регионы могут быть внутри регионов. Регионы могут быть внутри класса и внутри кода метода.

Членам класса (хотя бы публичным) хорошо указывать описания с помощью ///.

Для примера:
/// <summary>
/// Работа с данными
/// </summary>
class MyClass : IMyInterface, INotifyPropertyChanged, ICloneable, IDisposable
{
    #region поля

    private readonly Timer _timer;

    #endregion 

    #region ctor

    /// <summary>
    /// Конструктор по умолчанию для работы с данными
    /// </summary>
    public MyClass()
        : this(100500)
    {
    }
    
    /// <summary>
    /// Конструктор для работы с данными
    /// </summary>
    /// <param name="data">Данные</param>
    /// <param name="interval">Интервал таймера</param>
    public MyClass(int data, int interval = 10000)
    {
        _innerData = data;
        _timer = new Timer(interval);
    }

    #endregion

    #region IMyInterface

    private int _innerData;

    /// <summary>
    /// Данные
    /// </summary>
    public int Data => _innerData > 0 ? _innerData : 0;

    /// <summary>
    /// Выполнить работу
    /// </summary>
    public void DoWork()
    {
            
    }

    #endregion

    #region IDisposable

    public void Dispose()
    {
        _timer.Close();
    }

    #endregion

    #region ICloneable

    object ICloneable.Clone()
    {
        return Clone();
    }

    /// <summary>
    /// Клонировать
    /// </summary>
    public MyClass Clone()
    {
        return (MyClass)MemberwiseClone();
    }

    #endregion

    #region INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

    #endregion
}
Ответ написан
Griboks
@Griboks Куратор тега C#
Скачать расширение для студии, которое само оформляет код и говорит вам о всех ваших ошибках. Например я использую ReSharper.
Ответ написан
dmitry_pavlov
@dmitry_pavlov
World-class .NET freelance contractor (remotely)
  • Можно многое почерпнуть о правильной организации кода из предупреждений FxCop.
  • Про навигацию - один класс - один файл. Имя файла == название класса.
  • Partial classes меновать следует так чтобы срабатывал File Nesting.
  • Если сильно хочется иметь "table of content" - можно чаще объявлять интерфейсы и ориентироваться по ним.
  • Есть также базовая навигация по коду.
  • Ну и, если пользуетесь, средства навигации по коду от ReSharper.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
arantar
@arantar
Stylecop Analyzers.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы