#c# #partial-classes
Вопрос:
Предположим, я разрабатываю библиотеку C#, предназначенную для двух разных платформ (скажем, WinForms и Blazor).
Один из способов структурировать код-это иметь «основной» набор общих файлов, которые являются partial
классами, чтобы я мог добавлять код для конкретной платформы в отдельные файлы. Таким образом, в ядре может быть Point.cs
файл:
/// <summary>Class <c>Point</c> models a point in a two-dimensional
/// plane.</summary>
///
public partial class Point
{
/// <summary>method <c>draw</c> renders the point.</summary>
void draw() { ... }
}
Мой вопрос: Что, если бы я хотел добавить документацию для конкретной платформы Point.draw
? Или Point
резюме по классу?
Очевидно , что с частичными классами я мог бы добавить новые методы , специфичные для платформы, в PointBlazor.cs
и PointWinForms.cs
, но я не знаю способа добавить документацию к существующим методам или самому классу, уже определенному в Point.cs
, чтобы они упоминали другие методы, специфичные для платформы. Возможно ли это в C#?
(например, представьте, что в резюме класса точек может быть упомянуто только в Blazor, что точка использует координаты CSS или какой-либо комментарий в этом роде.)
Комментарии:
1. начиная с моих старых дней C/C , я бы просто определил переменную времени компиляции и
#ifdef BLAZOR
поместил ее в основной файл. В конце концов, частичные файлы все равно каким-то образом разрешаются во время компиляции… По общему признанию, клюге — но ничего лучшего на ум не приходит
Ответ №1:
Что, если бы я хотел добавить документацию для конкретной платформы в…
Одним из упущенных тегов в xml-документации является раздел «Примечания«, который следует за разделом «Сводка» и может использоваться для обработки разовой(ых) ситуационной информации.
Я предлагаю вам использовать этот раздел, чтобы указать на различия, основанные на технологии, что-то вроде этого:
/// <summary>method <c>draw</c> renders the point.</summary>
/// <remarks>
/// If running in Blazor, only use on the client side. No issues on winforms.
/// </remarks>
/// <param name="claims"></param>