Должны ли вы писать комментарии XML для интерфейсов, конкретных реализаций или обоих?

Название довольно много говорит обо всем. Где я могу применить свои комментарии к XML? Должен ли я помещать более общий XML-комментарий в интерфейс и более описательный в классе реализации? Вот так:

public interface IObjectRepository
{
    /// <summary>
    ///    Returns an object from the respository that contains the specified ID.
    /// </summary>
    Object GetObject(int Id);
}

public ObjectRepository : IObjectRepository
{
    /// <summary>
    ///    Retrieves an object from the database that contains the specified ID.
    /// </summary>
    public Object GetObject(int Id)
    {
        Object myData = // Get from DB code.
        return myData;
    }
}

Я не включил <param> для простоты.

Это хорошая практика для комментариев или есть другой способ? Я просто прошу прокомментировать интерфейс? Любая помощь приветствуется.

Ответы

Ответ 1

Вы можете определить комментарий в отдельном файле, а затем использовать тег <include> (см. MSDN). Таким образом, вы можете написать комментарий только один раз, но включить его в документацию в нескольких разных местах (например, декларация и реализация интерфейса).

Конечно, для этого требуется немного больше дисциплины, потому что писать труднее. Это также немного менее полезно, потому что вы не увидите их в исходном коде. Однако, если вы хотите использовать комментарии XML для создания документации, то это, вероятно, хороший подход.

Ответ 2

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

Суть заключается в том, чтобы ошибиться на стороне большей ясности, а не меньше.

Ответ 3

Документируйте интерфейсы.

Если вы реализуете более общую или более конкретную, например, может работать с более широкими входами или возвращает или выделяет более конкретные выходные данные, а затем документирует это при реализации.

Если реализация не отличается от интерфейса, вы можете использовать <inheritdoc />.

Связано: Наследовать документацию на С#?