Lorsque vous écrivez de la documentation xml, vous pouvez l'utiliser <see cref="something">something</see>
, ce qui fonctionne bien sûr. Mais comment référencer une classe ou une méthode avec des types génériques?
public class FancyClass<T>
{
public string FancyMethod<K>(T value) { return "something fancy"; }
}
Si j'allais écrire de la documentation xml quelque part, comment pourrais-je référencer la classe fantaisie? comment puis-je référencer un FancyClass<string>
? Et la méthode?
Par exemple, dans une classe différente, je voulais faire savoir à l'utilisateur que je retournerai une instance de FancyClass<int>
. Comment pourrais-je faire une chose voir cref pour ça?
1{T}.FancyMethod
1 {K} (T)"BTW, il était présent dans la documentation MSDN de .Net Framework 2.0 et 3.0 , mais il a disparu dans la version 3.5
la source
Int32
place deint
,Single
au lieu defloat
etc. (Mettre cette information ici au cas où quelqu'un d'autreTL; DR:
Bien que vous puissiez référencer une méthode dont la signature inclut
FancyClass<string>
(par exemple en tant que type de paramètre), vous ne pouvez pas référencer directement un tel type générique fermé. Le deuxième exemple contourne cette limitation. (Cela se voit par exemple sur la page de référence MSDN pour laSystem.String.Concat(IEnumerable<string>)
méthode statique ). :cref
Règles de commentaire de la documentation XML :Entourez la liste des paramètres de type générique avec des accolades
{}
au lieu de<>
crochets. Cela vous évite d'échapper à ce dernier au fur<
et à mesure>
- rappelez-vous, les commentaires de documentation sont XML!Si vous incluez un préfixe (comme
T:
pour les types, lesM:
méthodes, lesP:
propriétés, lesF:
champs), le compilateur n'effectuera aucune validation de la référence, mais copiera simplement lacref
valeur d'attribut directement dans la sortie XML de la documentation. Pour cette raison, vous devrez utiliser la syntaxe spéciale "ID string" qui s'applique à ces fichiers: utilisez toujours des identifiants complets et utilisez des astuces pour référencer les paramètres de type génériques (`n
sur les types,``n
sur les méthodes).Si vous omettez le préfixe , les règles de dénomination des langues normales s'appliquent: vous pouvez supprimer les espaces de noms pour lesquels il existe une
using
instruction et vous pouvez utiliser les mots-clés de type de la langue tels queint
au lieu deSystem.Int32
. En outre, le compilateur vérifiera l'exactitude de la référence.Aide-mémoire sur les commentaires de la documentation XML
cref
:la source
T
pièce?<typeparamref name="T"/>
Aucune des réponses présentées jusqu'à présent ne fonctionne complètement pour moi. ReSharper ne convertira pas la balise see en un Ctrllien + cliquable (par exemple ) à moins qu'elle ne soit complètement résolue.
Si la méthode dans l'OP était dans un espace de noms appelé
Test
, le lien complètement résolu vers la méthode affichée serait:<see cref="M:Test.FancyClass`1.FancyMethod``1(`0)"/>
Comme vous pouvez le faire, il ne devrait y avoir qu'un seul backtick avant le nombre de paramètres de type classe, puis deux backticks avant le nombre de paramètres de type de méthode, puis les paramètres sont le paramètre indexé zéro avec le nombre approprié de backticks.
Nous pouvons donc voir qu'il
FancyClass
a un paramètre de type de classe,FancyMethod
un paramètre de type et qu'un objet duFancyClass
type de paramètre sera transmis à la méthode.Comme vous pouvez le voir plus clairement dans cet exemple:
Le lien devient:
M:Test.FancyClass`2.FancyMethod``3(`0,`1,``0,``1,``2)
Ou « classe avec deux paramètres de type qui a une méthode avec trois paramètres de type où les paramètres de la méthode sont
ClassType1
,ClassType2
,MethodType1
,MethodType2
,MethodType3
»En plus, je n'ai trouvé cela documenté nulle part et je ne suis pas un génie, le compilateur m'a dit tout cela. Tout ce que vous avez à faire est de créer un projet de test, d' activer la documentation XML , puis d'insérer le code pour lequel vous souhaitez établir un lien et de mettre le début d'un commentaire de doc XML dessus (
///
):Générez ensuite votre projet et la documentation XML générée inclut le lien dans l' élément
doc
->members
->member
sous l'attributname
:la source
Plus loin des réponses de Lasse et TBC:
fournira également des info-bulles correctement, tandis que leur version le rend avec les accolades.
la source
1{T}"/>** causes a build-time warning: **XML comment on 'Blah' has syntactically incorrect cref attribute 'System.Collections.Generic.List
1 <T> - voudriez-vous élaborer sur la façon de l'utiliser?la source
la source