Podczas pisania dokumentacji XML można użyć <see cref="something">something</see>
, co oczywiście działa. Ale w jaki sposób odwołujesz się do klasy lub metody z typami rodzajowymi?
public class FancyClass<T>
{
public string FancyMethod<K>(T value) { return "something fancy"; }
}
Gdybym miał gdzieś napisać dokumentację XML, jak miałbym odwoływać się do tej wyszukanej klasy? jak mogę odwołać się do FancyClass<string>
? Co z metodą?
Na przykład w innej klasie chciałem poinformować użytkownika, że zwrócę instancję FancyClass<int>
. Jak mogę zrobić w tym celu coś z krepy?
1{T}.FancyMethod
1 {K} (T)”BTW, był obecny w dokumentacji MSDN .Net Framework 2.0 i 3.0 , ale zniknął w wersji 3.5
źródło
Int32
zamiastint
,Single
zamiastfloat
itp. (Umieszczenie tej informacji tutaj, na wypadek, gdyby ktoś się na nią natknął)TL; DR:
Chociaż można odwoływać się do metody, której podpis obejmuje
FancyClass<string>
(np. Jako typ parametru), nie można bezpośrednio odwoływać się do takiego zamkniętego typu ogólnego. Drugi przykład omija to ograniczenie. (Widać to np. Na stronie refrenowej MSDN dlaSystem.String.Concat(IEnumerable<string>)
metody statycznej ). :cref
Reguły komentarzy do dokumentacji XML :Otocz listę parametrów typów ogólnych za pomocą nawiasów klamrowych
{}
zamiast nawiasów<>
kątowych. Te części zamienne was od ucieczki ta ostatnia jak<
i>
- pamiętaj, komentarze dokumentacyjne są XML!Jeśli podasz prefiks (np.
T:
Dla typów,M:
dla metod,P:
dla właściwości,F:
dla pól), kompilator nie dokona żadnego sprawdzenia poprawności odwołania, ale po prostu skopiujecref
wartość atrybutu bezpośrednio do danych wyjściowych XML dokumentacji. Z tego powodu będziesz musiał użyć specjalnej składni „ciąg identyfikatora”, która ma zastosowanie w takich plikach: zawsze używaj w pełni kwalifikowanych identyfikatorów i użyj odwrotnych znaków , aby odwoływać się do ogólnych parametrów`n
typów ( na typach,``n
na metodach).Jeśli pominiesz prefiks , obowiązują zasady nazywania języka: możesz usunąć przestrzenie nazw, dla których istnieje
using
instrukcja, i możesz użyć słów kluczowych typu, takich jakint
zamiastSystem.Int32
. Ponadto kompilator sprawdzi referencję pod kątem poprawności.Ściągawka z komentarzem do dokumentacji XML
cref
:źródło
T
część?<typeparamref name="T"/>
Żadna z dotychczas pokazanych odpowiedzi nie działa dla mnie całkowicie. ReSharper nie przekształci tagu see w Ctrllink + możliwy do kliknięcia (np. ), Chyba że zostanie całkowicie rozwiązany.
Gdyby metoda w OP znajdowała się w nazwanej przestrzeni nazw
Test
, całkowicie rozstrzygnięty link do pokazanej metody to:<see cref="M:Test.FancyClass`1.FancyMethod``1(`0)"/>
Ponieważ możesz być w stanie wypracować, powinien być tylko jeden wsteczny przed liczbą parametrów typu klasy, a następnie dwa wsteczne przed liczbą parametrów typu metody, wówczas parametry są parametrem o indeksie zerowym z odpowiednią liczbą wstecznych.
Widzimy więc, że
FancyClass
ma jeden parametr typu klasy,FancyMethod
ma jeden parametr typu, a obiektFancyClass
typu parametru zostanie przekazany do metody.Jak można lepiej zobaczyć w tym przykładzie:
Link staje się:
M:Test.FancyClass`2.FancyMethod``3(`0,`1,``0,``1,``2)
Lub „Klasa z parametrami dwa typu, który posiada metodę z trzema parametrami typu gdzie parametry metod są
ClassType1
,ClassType2
,MethodType1
,MethodType2
,MethodType3
”Dodatkowo, nie znalazłem tego udokumentowanego nigdzie i nie jestem geniuszem, kompilator powiedział mi to wszystko. Wszystko, co musisz zrobić, to utworzyć projekt testowy, włączyć dokumentację XML , a następnie wstawić kod, dla którego chcesz wypracować link, i umieścić na nim komentarz XML doc (
///
):Następnie skompiluj projekt, a wygenerowana dokumentacja XML zawiera link w elemencie
doc
->members
->member
pod atrybutemname
:źródło
Dalej od odpowiedzi Lasse i TBC:
będzie także poprawnie wyświetlać podpowiedzi, a ich wersja renderuje je za pomocą nawiasów klamrowych.
źródło
1{T}"/>** causes a build-time warning: **XML comment on 'Blah' has syntactically incorrect cref attribute 'System.Collections.Generic.List
1 <T> - czy chciałbyś się zastanowić, jak tego użyć?źródło
źródło