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="FancyClass{T}.FancyMethod{K}(T)"/> for more information.
답변
/// <summary>Uses a <see cref="FancyClass{T}" /> instance.</summary>
BTW, .Net Framework 2.0 및 3.0 의 MSDN 설명서에 있지만 버전 3.5 에서는 사라졌습니다.
답변
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>
(즉, 파라미터 입력 등)를 사용하면 없는 그러한 직접 범용 형 폐쇄 참조. 두 번째 예는 이러한 제한을 해결합니다. (이것은 정적 System.String.Concat(IEnumerable<string>)
메소드 에 대한 MSDN 참조 페이지 에서 볼 수 있습니다 ). :
XML 문서 주석 cref
규칙 :
-
일반 유형 매개 변수 목록을
{}
<>
꺾쇠 괄호 대신 중괄호로 묶습니다. 후자로 탈출에서이 예비 부품을<
하고>
– 기억은, 문서 주석은 XML입니다! -
접두어 (예 :
T:
유형,M:
메소드,P:
특성,F:
필드)를 포함하면 컴파일러는 참조의 유효성 검증을 수행하지 않고cref
속성 값을 문서 XML 출력으로 바로 복사합니다 . 따라서 이러한 파일에 적용되는 특수한 “ID 문자열”구문 을 사용해야합니다. 항상 정규화 된 식별자를 사용하고 백틱을 사용하여 일반 유형 매개 변수 (`n
유형,``n
메소드)를 참조하십시오. -
접두어를 생략하면 일반 언어 이름 지정 규칙이 적용됩니다.
using
명령문 이있는 네임 스페이스를 삭제 하고int
대신 언어 유형 키워드를 사용할 수 있습니다System.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);
}
}
답변
지금까지 표시된 답변 중 어느 것도 나를 위해 완전히 작동하지 않습니다. ReSharper는 see 태그가 완전히 해결되지 않는 한 Ctrl+ 클릭 가능한 링크 (예 :)로 변환하지 않습니다 .
OP의 메소드가이라는 네임 스페이스에있는 경우 표시된 메소드에 대한 Test
완전히 해결 된 링크는 다음과 같습니다.
<see cref="M:Test.FancyClass`1.FancyMethod``1(`0)"/>
해결할 수있을 때 클래스 유형 매개 변수 수 앞에 하나의 백틱이 있어야하고 메서드 유형 매개 변수 수 앞에 두 개의 백틱이 있어야하며 매개 변수는 적절한 수의 백틱이있는 인덱스가없는 0 매개 변수입니다.
따라서 FancyClass
클래스 유형 매개 변수 FancyMethod
가 하나 이고 유형 매개 변수 가 하나 있으며 FancyClass
매개 변수 유형 의 오브젝트가 메소드에 전달됨을 알 수 있습니다.
이 예제에서보다 명확하게 볼 수 있듯이
namespace Test
{
public class FancyClass<A, B>
{
public void FancyMethod<C, D, E>(A a, B b, C c, D d, E e) { }
}
}
링크는 다음과 같습니다.
M:Test.FancyClass`2.FancyMethod``3(`0,`1,``0,``1,``2)
또는 “세 가지 형태 파라미터를 가지는 방법을 가지고 두 유형 매개 변수와 클래스 메소드 매개 변수가있는 곳 ClassType1
, ClassType2
, MethodType1
, MethodType2
, MethodType3
“
추가 메모로, 나는이 문서가 어디에도 없다는 것을 알지 못했고 천재가 아닙니다. 컴파일러는 나 에게이 모든 것을 말했습니다. 테스트 프로젝트를 만들고 XML documentation을 활성화 한 다음 링크를 만들려는 코드를 삽입하고 XML 문서 주석의 시작 부분 ( ///
) 을 추가하기 만하면됩니다 .
namespace Test
{
public class FancyClass<T>
{
///
public string FancyMethod<K>(T value) { return "something fancy"; }
}
public class Test
{
public static void Main(string[] args) { }
}
}
그런 다음 프로젝트를 빌드하면 출력 된 XML 문서 에 속성 아래의 doc
-> members
-> member
요소에 링크가 포함됩니다 name
.
<?xml version="1.0"?>
<doc>
<assembly>
<name>Test</name>
</assembly>
<members>
<member name="M:Test.FancyClass`1.FancyMethod``1(`0)">
</member>
</members>
</doc>
답변
Lasse와 TBC의 답변에서 더 :
/// <see cref="T:FancyClass`1{T}"/> for more information.
/// <see cref="M:FancyClass`1{T}.FancyMethod`1{K}(T)"/> for more information.
툴팁도 올바르게 제공하지만 버전은 중괄호로 렌더링합니다.
답변
/// Here we discuss the use of <typeparamref name="TYourExcellentType"/>.
/// <typeparam name="TYourExcellentType">Your exellent documentation</typeparam>
답변
/// <see cref="FancyClass<T>.FancyMethod<K>(T)"/> for more information.