Успадкування коментарів XML від інтерфейсів на C #


78

Мені було цікаво, чи хтось знає, як пов'язати коментар інтерфейсу xml з реалізацією. Проблема в тому, що я хочу, щоб базові коментарі спочатку надходили з мого інтерфейсу. Приклад:

interface myinterface {

       /// <summary>
       /// Does something.
       /// </summary>
       void method1(string foo);

}

а потім реалізація:

public class myclass : myinterface {


       public void method1(string foo) {
             //do something...
       }
}

Отже, якщо я наведу курсор на метод за допомогою миші після створення об'єкта:

myclass foo = new myclass();
foo.method1("do something");

як я можу зробити так, щоб коментарі з'являлися у спливаючому вікні наведення курсора? Чи можна якось пов’язати коментарі інтерфейсу з реалізацією? Я знаю, що в Java існує спосіб, але не можу знайти рішення для C #.

Дякую


14
+1 за це прокляте гарне запитання ...
jcolebrand

3
Я завжди дивувався з цього приводу. Повинен бути атрибут, який ви можете додати до класу для успадкування документації.
BentOnCoding


Який дивний пропуск від VS: /
nawfal

Хлопці VS, чи не можете ви відобразити підсумок з інтерфейсу, коли він недоступний за фактичним методом!
Arjun_TECH

Відповіді:


18

Пов’язувати XML-коментарі неможливо за допомогою IMHO, але ви можете скористатися таким інструментом, як GhostDoc, щоб скопіювати коментар XML із вашого інтерфейсу / базового класу до класу реалізації / похідного.


1
Так, використовуйте GhostDoc; спочатку він побачить, чи замінено батьківський клас або метод, і скопіює коментар, якщо так. ReSharper також копіює коментарі xml-doc в більш обмеженому обсязі вилучення нових суперкласів / інтерфейсів або підштовхування членів вгору / вниз в ієрархії.
KeithS

Чи не потрібна для цього версія Pro? Я можу зробити це з непрофесійною версією, виконуючи по одному учаснику за раз, і це не працює на рівні класу.
Кіт

1
ReSharper може це зробити теж, тому, якщо ви вже є власником, наведіть курсор на успадкований метод / властивість, натисніть ALT+RETURNі ви зможете "Копіювати коментарі з бази". ReSharper вражає мене щодня! :-)
itmuckel

9

XMLDoc визначає тег <include />для включення коментарів з іншого файлу, який існував ще з Visual Studio 2003. Найбільшим застереженням є файл, на який посилається, - файл, що містить лише документацію XMLDoc, а не інший файл-джерело.

Докладніше див. На сторінці MSDN .


1
Не зовсім відповідь, але дуже корисна інформація в будь-якому випадку, тож спасибі
Basic

7

Якщо ви використовуєте GhostDoc, це дуже допомагає з "транспортуванням" документації від інтерфейсів до коду реалізації.


1
Будь-які поради щодо того, як це робиться (я щойно встановив ghost doc v4). Або це про / безкоштовна версія?
Костянтин

1
@Konstantin Я завжди користувався безкоштовною версією і ніколи не робив нічого конкретного, щоб це сталося. Я просто записую документи в інтерфейс, а потім, коли я натискаю CTRL + D для методу в реалізовуючому класі (де метод ще не має документів), він копіюється з відповідного методу в інтерфейсі. Принаймні раніше це працювало так (не використовуючи GhostDoc у моєму поточному проекті).
Фредрік Морк,

2
Подяки сьогодні, здається, є особливістю про-версії.
Костянтин

Через 6 років я щойно спробував спільноту Ghostdoc (безкоштовно), і це працює. Напишіть документ в інтерфейсі і просто введіть ///над методом у класі реалізації.
Michaël Polla


0

http://blog.x-tensive.com/2008/02/fixml.html

Це постпроцесор, який має певні додаткові опції, де відсутні оригінальні системи документації.

З веб-сайту:

Стислий підсумок:

FiXml - це постпроцесор XML-документації, вироблений C # \ Visual Basic.Net. У ньому розглядаються деякі найбільш надокучливі випадки, пов’язані з написанням документації XML цими мовами: - Немає підтримки для успадкування документації від базового класу або інтерфейсу. Тобто документація для будь-якого перезаписаного члена повинна бути написана з нуля, хоча зазвичай цілком бажано успадкувати хоча б її частину. - Немає підтримки для вставки загальновживаних шаблонів документації, таких як „Цей тип є одностороннім - використовуйте його властивість, щоб отримати єдиний його екземпляр.“, Або навіть „Ініціалізує новий екземпляр класу“.


Хтось знає, чи X-Tensive FiXml призначений для зміни вихідного файлу чи лише вихідних XML-документів? О - зараз він знайдений дещо в іншому місці як частина Xtensive.MSBuildTasks x-tensive.com/Downloads/?Path=Freeware \ Xtensive.MSBuildTasks)
kpollock

0

Я створив інструмент командного рядка для подальшої обробки файлів документації XML, додавши підтримку тегу <inheritdoc />.

Незважаючи на те, що це не допомагає з Intellisense у вихідному коді, воно дозволяє включити модифіковані файли документації XML до пакета NuGet і, отже, працює з Intellisense у посиланих пакетах NuGet.

Для отримання додаткової інформації див. Www.inheritdoc.io (доступна безкоштовна версія).


1
Я багато використовую цей тег, але не пам’ятаю, щоб для цього встановлювали сторонню систему. Дивно, що ніхто інший про це не згадує.
Lopsided
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.