Как/в каких обстоятельствах тег <see> в комментариях Delphi xml действительно работает?
Интересно, как работают эти XML-ссылки, я просто не понимаю, почему они работают или почему они не работают, и я ничего не нашел об этом.
Вот пример:
type
TOuterClass= class
strict private
type
TLogger = class
public
/// <summary>adds a log entry</summary>
/// <param name="Msg">text to log</param>
procedure Log(const Msg: string);
end;
strict private
FLogger: TLogger;
public
/// <summary>adds a log entry</summary>
/// <param name="Msg">text to log</param>
/// <remarks>just calls <see cref="TOuterClass.TLogger.Log" />
/// </remarks>
procedure Log(const Msg: string);
property Logger: TLogger read FLogger;
end;
Ссылка в комментарии TOuterClass.Log не работает. Delphi XE5 просто думает об этом, а затем отказывается.
Другой довольно простой пример:
Unit MyUnit
type
/// <summary>MyType Comment</summary>
TMyType = reference to procedure;
/// <param name="MyTypeParam"><see cref="MyUnit.TMyType" /></param>
procedure MyProcedure(MyTypeParam: TMyType);
Опять же, эта ссылка не работает. Интересная вещь в этом: если вы просто закомментируете комментарий xml, то Delphi автоматически создает только тот же текст ссылки ( "MyUnit.TMyType" ), и он работает! Это меня действительно сбивает с толку.
В чем именно эти ссылки могут ссылаться, какие соглашения следует выполнять, чтобы заставить его работать, и к чему они не могут привязываться?
Официальная документация довольно короткая:
<see> Reference to a specific type, symbol, or identifier
Если это имеет значение: я использую Delphi XE5, но я был бы признателен за то, как это работает в любой версии Delphi. Я бы даже оценил примеры ссылок, которые действительно работают вообще (пожалуйста, включите вашу версию Delphi), возможно, это поможет выявить механику, стоящую за ней.
Изменить 25.08.2014:
Я начинаю думать, что эти ссылки ссылаются на фактические файлы документации html, которые в моем случае не существуют, потому что у меня нет каталога, определенного для них. Я просто делаю XML-комментарии, чтобы получить подсказки в среде Delphi. Кто-нибудь может это подтвердить?
Ответы
Ответ 1
Не уверен, что это все еще проблема, но я знаю, что в XE3 вы можете использовать | символ для ссылки назад
Пример
Unit MyUnit
type
/// <summary>MyType Comment</summary>
TMyType = reference to procedure;
/// <param name="MyTypeParam"><see cref="MyUnit|TMyType" /></param>
procedure MyProcedure(MyTypeParam: TMyType);
Возможно, я неправильно понимаю проблему, но этот синтаксис позволит описанию кода ссылаться обратно.
Тем не менее это создает предупреждение при компиляции, поэтому, если вы хотите использовать это, вы можете отключить предупреждение, добавив {$WARN XML_CREF_NO_RESOLVE OFF}
в код.
У меня есть скриншоты, но я пока не могу их опубликовать. Но вы можете попробовать это самостоятельно.
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
/// <summary>MyType Comment</summary>
TMyType = reference to procedure;
/// <summary>This is MyProcedure</summary>
/// <param name="MyTypeParam"><see cref="Unit2|TMyType" /></param>
procedure MyProcedure(MyTypeParam: TMyType);
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
//Call MyProcedure
MyProcedure(nil);
end;
end.