When providing multiple overloads of the same method, I often have to repeat the description of the method, which violates DRY and increases maintenance cost:
/// <summary>
/// Frobnicates all foos read from the given reader. Frobnication is a
/// process where ...[lots of text]...
/// </summary>
/// <param name="hasBar">[Description of hasBar]</param>
void FrobnicateFoo(TextReader reader, bool hasBar)
{
...
}
/// <summary>
/// Frobnicates all foos read from the given file. Frobnication is a
/// process where ...[same lots of text]...
/// </summary>
/// <param name="hasBar">[Same description of hasBar]</param>
void FrobnicateFoo(String path, bool hasBar)
{
...
}
This problem gets worse if multiple parameters with the same purpose are repeated ("hasBar" is given as an example).
One "workaround" I found is to "reference" the other documentation:
/// <summary>
/// Frobnicates all foos read from the given reader. Frobnication is a
/// process where ...[lots of text]...
/// </summary>
/// <param name="hasBar">[Description of hasBar]</param>
void FrobnicateFoo(TextReader reader, bool hasBar)
{
...
}
/// <summary>
/// Convenience method which opens the file with a UTF-8 encoding and then
/// frobnicates all foos, see FrobnicateFoo(TextReader).
/// </summary>
void FrobnicateFoo(String path, bool hasBar)
{
...
}
Obviously, that's less convenient for the user of the library.
Is there some built-in mechanism (or smart strategy) that I can use to avoid duplication and make life easy for the users of my methods? I am mainly concerned about IntelliSense, not generated HTML documentation.
An XML comment encountered outside the document type declaration is represented by the Comment value syntax element. It contains the comment text from the XML message. If the value of the element contains the character sequence --> , the sequence is replaced with the text --> .
Select the entire block of xml and hit CTRL+/ to comment the entire block. The comment that was present previously now shows up as part of the file and not as a comment anymore.
C# documentation comments use XML elements to define the structure of the output documentation. One consequence of this feature is that you can add any valid XML in your documentation comments. The C# compiler copies these elements into the output XML file.
Allows notes and other human readable comments to be included within an XML file. XML Parsers should ignore XML comments. Some constrains govern where comments may be placed with an XML file.
There is actually a solution using XML tag. You actually build your documentation in a XML file and then link your method to this XML file. Here is a small example I made up.
Solution here is in VB.NET, but I guess it won't be really difficult to convert it to C#...
First, you need a standard library definition:
''' <summary>
''' This is my First class
''' </summary>
''' <remarks></remarks>
Public Class FirstClass
''' <summary>
''' This is my first method
''' </summary>
''' <param name="A">A</param>
''' <returns>True</returns>
''' <remarks></remarks>
Public Function FirstMethod(A As Integer) As Boolean
Return True
End Function
''' <include file="DocFile.xml" path="Doc/member[@name='SecondMethod']/*" />
Public Function SecondMethod(A As Integer) As String
Return "Hello"
End Function
''' <include file="DocFile.xml" path="Doc/member[@name='SecondMethod']/*" />
Public Function SecondMethod(A As Integer, B As String) As String
Return "Hello"
End Function
''' <include file="DocFile.xml" path="Doc/member[@name='SecondMethod']/*" />
Public Function SecondMethod(A As Integer, B As String, C As Boolean) As String
Return "Hello"
End Function
End Class
So the doc for the class and the first method are "standard". For the SecondMethod, I provide a XML link.
So next you need to create a XML file, here called DocFile.XML where you will put the documentation for your methods:
<Doc>
<member name="SecondMethod">
<summary>
This is my second method
</summary>
<param name="A">a</param>
<param name="B">b</param>
<param name="C">c</param>
<returns>A string containing "Hello"</returns>
<remarks></remarks>
</member>
</Doc>
And when you compile it together and create the documentation (here I used SandCastle), it produces the following:
And for each method:
and
TLDR
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With