Ao escrever a documentação xml, você pode usar <see cref="something">something</see>
, o que funciona, é claro. Mas como você faz referência a uma classe ou a um método com tipos genéricos?
public class FancyClass<T>
{
public string FancyMethod<K>(T value) { return "something fancy"; }
}
Se eu fosse escrever uma documentação xml em algum lugar, como referenciaria a classe sofisticada? como posso fazer referência a FancyClass<string>
? E o método?
Por exemplo, em uma classe diferente, eu queria informar ao usuário que retornarei uma instância de FancyClass<int>
. Como eu poderia fazer uma coisa de ver cref por isso?
1{T}.FancyMethod
1 {K} (T)"BTW, ele estava presente na documentação do MSDN do .Net Framework 2.0 e 3.0 , mas desapareceu na versão 3.5
fonte
Int32
, em vez deint
,Single
em vez defloat
etc. (Colocar esta informação aqui no caso de alguém tropeça mais neste)TL; DR:
Embora você possa fazer referência a um método cuja assinatura inclua
FancyClass<string>
(por exemplo, como um tipo de parâmetro), não é possível fazer referência diretamente a um tipo genérico fechado. O segundo exemplo contorna essa limitação. (Isso é visto, por exemplo, na página de referênciaSystem.String.Concat(IEnumerable<string>)
do MSDN para o método estático ). :cref
Regras de comentários da documentação XML :Coloque a lista de parâmetros de tipo genérico entre chaves, em
{}
vez de entre<>
colchetes. Isso evita que você escape deste último<
e>
lembre-se de que os comentários da documentação são XML!Se você incluir um prefixo (como
T:
para tipos,M:
métodos,P:
propriedades,F:
campos), o compilador não executará nenhuma validação da referência, mas simplesmente copiará ocref
valor do atributo diretamente para a saída XML da documentação. Por esse motivo, você precisará usar a sintaxe especial "ID string" que se aplica a esses arquivos: sempre use identificadores totalmente qualificados e use backticks para referenciar parâmetros de tipo genérico (`n
em tipos,``n
em métodos).Se você omitir o prefixo , aplicar-se-ão regras regulares de nomeação de idiomas: você pode eliminar os namespaces para os quais há um
using
instrução e pode usar as palavras-chave do tipo de idioma, como emint
vez deSystem.Int32
. Além disso, o compilador irá verificar a referência para correção.cref
Folha de dicas sobre comentários da documentação XML :fonte
T
parte?<typeparamref name="T"/>
Nenhuma das respostas mostradas até agora funciona completamente para mim. O ReSharper não converterá a tag see em um Ctrllink com + clique (por exemplo ), a menos que seja completamente resolvida.
Se o método no OP estivesse em um namespace chamado
Test
, o link completamente resolvido para o método mostrado seria:<see cref="M:Test.FancyClass`1.FancyMethod``1(`0)"/>
Como você pode resolver, deve haver apenas um backtick antes do número de parâmetros do tipo de classe, depois dois backticks antes do número de parâmetros do tipo de método e, em seguida, os parâmetros são o parâmetro indexado a zero com o número apropriado de backticks.
Portanto, podemos ver que
FancyClass
possui um parâmetro de tipo de classe,FancyMethod
tem um parâmetro de tipo e um objeto doFancyClass
tipo de parâmetro será passado para o métodoComo você pode ver mais claramente neste exemplo:
O link se torna:
M:Test.FancyClass`2.FancyMethod``3(`0,`1,``0,``1,``2)
Ou "Classe com dois parâmetros de tipo que tem um método com três parâmetros do tipo em que os parâmetros do método são
ClassType1
,ClassType2
,MethodType1
,MethodType2
,MethodType3
"Como uma observação adicional, não encontrei isso documentado em nenhum lugar e não sou um gênio, o compilador me contou tudo isso. Tudo o que você precisa fazer é criar um projeto de teste, ativar a documentação XML , inserir o código para o qual deseja criar um link e colocar o início de um comentário de documento XML (
///
):Em seguida, construa seu projeto e a documentação XML gerada inclui o link no elemento
doc
->members
->member
sob o atributoname
:fonte
Além das respostas de Lasse e TBC:
também fornecerá dicas de ferramenta corretamente, enquanto sua versão a renderiza com chaves.
fonte
1{T}"/>** causes a build-time warning: **XML comment on 'Blah' has syntactically incorrect cref attribute 'System.Collections.Generic.List
1 <T> - Gostaria de elaborar sobre como se deve usar isso?fonte
fonte