2010-09-08 16 views
24

Dire que j'ai ce constructeur:Documenter méthodes surchargées avec les mêmes commentaires XML

/// <summary> 
/// Example comment. 
/// </summary> 
public SftpConnection(string host, string username, 
    string password, int port) {...} 

qui a ces surcharges:

public SftpConnection(string host, string username, string password) 
    : this(host, username, password, 22) { } 

public SftpConnection(string host, string username, int port) 
    : this(host, username, "", port) { } 

public SftpConnection(string host, string username) 
    : this(host, username, "", 22) { } 

et en réalité, le commentaire XML est assez grand, avec param, example et exception éléments et ainsi de suite. Y a-t-il un moyen d'ajouter un doublon de commentaire XML spécial aux surcharges, de sorte qu'ils utilisent exactement les mêmes commentaires de sorte que je n'ai pas besoin de copier-coller les entiers, énormes commentaires originaux?

Je pense quelque chose comme: <use cref="SftpConnection(string,string,string,int)" /> qui ne fonctionne pas bien sûr.

Je suis au courant de l'élément include, mais je l'impression qu'il lit au lieu des commentaires à partir d'un fichier XML, que je ne veux pas - je veux que le commentaire soit encore visible dans le code, mais une seule fois.

Merci :-)

+1

Cette question est assez ancienne - pour newcommers googling "inheritdoc" devrait vous mettre sur un chemin où vous trouverez la réponse que vous cherchez. (Cela dépend de vos options et requiements.) – AnorZaken

+0

@AnorZaken Vous devriez poster votre commentaire en guise de réponse, c'est en fait très utile. –

Répondre

17

Vous ne pouvez pas vraiment faire cela. Je trouve ça agaçant aussi. Toutefois, vous pouvez résoudre le problème en utilisant des valeurs de paramètre par défaut plutôt que de nombreuses surcharges. Au lieu de:

public SftpConnection(string host, string username, string password, int port) 
public SftpConnection(string host, string username, string password) 
public SftpConnection(string host, string username, int port) 
public SftpConnection(string host, string username) 

Vous pouvez avoir juste un seul:

public SftpConnection(string host, string username, string password = "", 
         int port = 22) 

Cela a plusieurs avantages:

  • Besoin d'un seul commentaire XML. Tout le point de ma réponse. Users

  • Les utilisateurs de Visual Studio peuvent instantanément voir que la valeur par défaut pour port est 22. Avec les surcharges, cela n'est pas évident; vous devez le mentionner spécifiquement dans la documentation.

  • Vous indirectement code encourages client pour devenir plus lisible en encourageant l'utilisation des paramètres nommés (par exemple port: 2222 au lieu de simplement 2222, qui est moins clair).

Et la plus grande partie à ce sujet est que l'utilisation de valeurs par défaut ne pas supprimer la possibilité d'avoir encore plusieurs si vous les surcharges besoin. Des exemples typiques où vous voulez avec des valeurs surcharges par défaut pourrait être quelque chose comme ...

ReadFrom(string filename, ReaderOptions options = null) 
ReadFrom(Stream stream, ReaderOptions options = null) 
ReadFrom(byte[] rawData, ReaderOptions options = null) 

Dans ce cas, je dirais les commentaires XML devraient effectivement être différents.

+0

Vous avez raison à ce sujet. J'ai changé mon code comme vous l'avez suggéré. Néanmoins, cela va me déranger maintenant dans le futur! Et il doit y avoir d'autres situations où cette fonctionnalité est nécessaire. – Nobody

+0

Certainement. Comme je l'ai dit, je trouve ça agaçant aussi. Valeurs par défaut seulement * soulager * le problème, pas * le résoudre * ... – Timwi

+0

Bien sûr, cela nécessite que vous utilisiez le compilateur C# 4.0 ... – Tergiver

1

Est-ce ce que vous voulez?

/// <seealso cref="SftpConnection(string,string,string,int)"</seealso> 
+0

Cela ne fonctionne pas, mais je vais regarder dans l'élément seealso, TY. – Nobody

+0

OK, je ne peux pas sembler obtenir «seelso» pour faire n'importe quoi. Long shot mais est-ce que c'est peut-être quelque chose à voir avec la version de C# ou .net? – Nobody

+0

Je pense que c'est destiné à créer des documentations HTML enrichies en utilisant doxygen et d'autres outils de documentation ... regardez mal ce qu'il fait, cependant ... quelle version de VS utilisez-vous (ou utilisez-vous Mono)? –

3

Une demi-solution est l'étiquette <overloads></overloads>.Bien qu'il ne résout pas le problème avec <summary/>, il fournit une documentation qui s'affiche partout où toutes les surcharges sont répertoriées en tant que groupe, y compris IntelliSense et SandCastle.