223

xml ドキュメントを作成するときは<see cref="something">something</see>、もちろん機能する を使用できます。しかし、ジェネリック型を持つクラスまたはメソッドをどのように参照するのでしょうか?

public class FancyClass<T>
{
  public string FancyMethod<K>(T value) { return "something fancy"; }
}

どこかに xml ドキュメントを書くつもりなら、どのようにファンシー クラスを参照すればよいでしょうか? を参照するにはどうすればよいFancyClass<string>ですか? メソッドはどうですか?

たとえば、別のクラスでは、のインスタンスを返すことをユーザーに知らせたいと思いましたFancyClass<int>。そのためのsee crefをどのように作成できますか?

4

8 に答える 8

288

メソッドを参照するには:

/// <see cref="FancyClass{T}.FancyMethod{K}(T)"/> for more information.
于 2009-02-10T13:01:18.713 に答える
48

TL;DR:

「どのように参照しFancyClass<T>ますか?」

   /// <see cref="FancyClass{T}"/>

「どうFancyClass<T>.FancyMethod<K>(T value)ですか?」

   /// <see cref="FancyClass{T}.FancyMethod{K}(T)"/>

「どうすれば を参照できFancyClass<string>ますか?」

   /// <see cref="SomeType.SomeMethod(FancyClass{string})"/>
   /// <see cref="FancyClass{T}"/> whose generic type argument is <see cref="string"/>

署名が含まれているメソッドを参照することはできFancyClass<string>ますが(たとえば、パラメーターの型として)、そのような閉じたジェネリック型を直接参照することはできません。2 番目の例は、その制限を回避します。(これは、静的メソッドのMSDN 参照ページSystem.String.Concat(IEnumerable<string>)などで見られます)。:

XML ドキュメントのコメントcrefルール:

  • {}<>ジェネリック型パラメーター リストは、山かっこではなく中かっこで囲みます。&lt;これにより、後者をandとしてエスケープする必要がなくなります&gt;— ドキュメントのコメントは XML であることを忘れないでください!

  • 接頭辞 (T:型、M:メソッド、P:プロパティ、F:フィールドなど) を含めると、コンパイラは参照の検証を実行せず、cref属性値をドキュメントの XML 出力に直接コピーします。このため、そのようなファイルに適用される特別な「ID 文字列」構文を使用する必要があります。常に完全修飾識別子を使用し、バッククォートを使用してジェネリック型パラメーター (`n型、``nメソッド) を参照します。

  • 接頭辞 を省略すると、通常の言語命名規則が適用されます。ステートメントがある名前空間を削除したり、代わりにusingなどの言語の型キーワードを使用したりできます。また、コンパイラは参照の正確性をチェックします。intSystem.Int32

XML ドキュメント コメントcrefチート シート:

namespace X
{
    using System;

    /// <see cref="I1"/>  (or <see cref="X.I1"/> from outside X)
    /// <see cref="T:X.I1"/>
    interface I1
    {
        /// <see cref="I1.M1(int)"/>  (or <see cref="M1(int)"/> from inside I1)
        /// <see cref="M:X.I1.M1(System.Int32)"/>
        void M1(int p);

        /// <see cref="I1.M2{U}(U)"/>
        /// <see cref="M:X.I1.M2``1(``0)"/>
        void M2<U>(U p);

        /// <see cref="I1.M3(Action{string})"/>
        /// <see cref="M:X.I1.M3(System.Action{System.String})"/>
        void M3(Action<string> p);
    }

    /// <see cref="I2{T}"/>
    /// <see cref="T:X.I2`1"/>
    interface I2<T>
    {
        /// <see cref="I2{T}.M1(int)"/>
        /// <see cref="M:X.I2`1.M1(System.Int32)"/>
        void M1(int p);

        /// <see cref="I2{T}.M2(T)"/>
        /// <see cref="M:X.I2`1.M2(`0)"/>
        void M2(T p);

        /// <see cref="I2{T}.M3{U}(U)"/>
        /// <see cref="M:X.I2`1.M3``1(``0)"/>
        void M3<U>(U p);
    }
}
于 2016-12-18T12:07:17.063 に答える
47
/// <summary>Uses a <see cref="FancyClass{T}" /> instance.</summary>

ところで、 .Net Framework 2.0および3.0の MSDN ドキュメントには存在していましたが、バージョン 3.5では姿を消しました。

于 2009-02-10T12:53:39.980 に答える
10

Lasse と TBC の回答からさらに:

/// <see cref="T:FancyClass`1{T}"/> for more information.

/// <see cref="M:FancyClass`1{T}.FancyMethod`1{K}(T)"/> for more information.

ツールチップも正しく提供されますが、そのバージョンでは中括弧でレンダリングされます。

于 2011-10-26T11:48:07.887 に答える
7
/// Here we discuss the use of <typeparamref name="TYourExcellentType"/>.
/// <typeparam name="TYourExcellentType">Your exellent documentation</typeparam>
于 2016-11-10T15:54:16.620 に答える
1
/// <see cref="FancyClass&lt;T>.FancyMethod&lt;K>(T)"/> for more information.
于 2012-01-28T15:25:26.110 に答える