Supongamos que tengo esta interfaz
public interface IFoo
{
///<summary>
/// Foo method
///</summary>
void Foo();
///<summary>
/// Bar method
///</summary>
void Bar();
///<summary>
/// Situation normal
///</summary>
void Snafu();
}
Y esta clase
public class Foo : IFoo
{
public void Foo() { ... }
public void Bar() { ... }
public void Snafu() { ... }
}
¿Hay alguna manera o hay una herramienta que me permita poner automáticamente los comentarios de cada miembro en una clase o interfaz base?
¡Porque odio volver a escribir los mismos comentarios para cada subclase derivada!
c#
inheritance
comments
jumpinjackie
fuente
fuente
Respuestas:
GhostDoc hace exactamente eso. Para los métodos que no se heredan, intenta crear una descripción a partir del nombre.
FlingThing()
se convierte en"Flings the Thing"
fuente
<summary>
,<param>
,<returns>
,<throws>
,etc...
secciones para ti. Muchas veces con resultados suficientemente buenos; otras veces necesitando correcciones o ampliando, pero aún reduciendo el esfuerzo general.Siempre puedes usar la
<inheritdoc />
etiqueta.fuente
Úselo
/// <inheritdoc/>
si desea herencia. Evite GhostDoc o cualquier cosa por el estilo.Estoy de acuerdo en que es molesto que los comentarios no se hereden. Sería un complemento bastante simple de crear si alguien tuviera tiempo (desearía tenerlo).
Dicho esto, en nuestra base de código colocamos comentarios XML solo en las interfaces y agregamos comentarios de implementación adicionales a la clase. Esto funciona para nosotros ya que nuestras clases son privadas / internas y solo la interfaz es pública. Cada vez que usamos los objetos a través de las interfaces, los comentarios completos se muestran en intellisence.
GhostDoc es un buen comienzo y ha facilitado el proceso de escribir comentarios. Es especialmente útil mantener los comentarios actualizados cuando agrega / elimina parámetros, vuelve a ejecutar GhostDoc y actualizará la descripción.fuente
<param name="origin">The origin.</param>
. Vea ghostdoc dice las cosas más malditas para más ejemplos. Visual Studio ahora tiene mucho mejor linting y generadores para xmldocs para avisarle cuando los parámetros + documentos no se alinean, por lo que GhostDoc (u otras herramientas) ya no se necesitan.Java tiene esto y lo uso todo el tiempo. Solo haz:
Y la herramienta Javadoc lo resuelve.
C # tiene un marcador similar:
Puede leer más aquí:
http://www.ewoodruff.us/shfbdocs/html/79897974-ffc9-4b84-91a5-e50c66a0221d.htm
fuente
<inheritdoc/>
marcador: Sandcastle lo tiene. shfb.codeplex.comYo diría que use directamente el
Y
Tienes que poner estos comentarios solo en la línea anterior de tu clase / método
Esto obtendrá la información de sus comentarios, por ejemplo, de una interfaz que haya documentado como:
fuente
Resharper tiene una opción para copiar los comentarios de la clase base o interfaz.
fuente
Otra forma es utilizar la
<see />
etiqueta de documentación XML. Este es un esfuerzo adicional, pero funciona fuera de la caja ...Aquí hay unos ejemplos:
Actualizar:
Ahora prefiero usar lo
/// <inheritdoc/>
que ahora es compatible con ReSharper.fuente
Terminé creando una herramienta para posprocesar los archivos de documentación XML para agregar soporte para reemplazar la
<inheritdoc/>
etiqueta en los archivos de documentación XML. Disponible en www.inheritdoc.io (versión gratuita disponible).fuente
Bueno, hay una especie de solución nativa que encontré para .NET Core 2.2
La idea es usar
<include>
etiqueta.Puedes agregar
<GenerateDocumentationFile>true</GenerateDocumentationFile>
tu.csproj
archivo.Es posible que tenga una interfaz:
Y algo que hereda de ella:
Ok, da un poco de miedo, pero agrega los elementos esperados al
YourNamespace.xml
.Si se construye
Debug
configuración, se puede intercambiarRelease
paraDebug
elfile
atributo de lainclude
etiqueta.Para encontrar una referencia correcta
member
,name
simplemente abra elDocumentation.xml
archivo generado .También asumo que este enfoque requiere que un proyecto o solución se compile al menos dos veces (la primera vez para crear un archivo XML inicial y la segunda para copiar elementos de él a sí mismo).
El lado positivo es que Visual Studio valida los elementos copiados, por lo que es mucho más fácil mantener la documentación y el código sincronizados con la interfaz / clase base, etc. (por ejemplo, nombres de argumentos, nombres de parámetros de tipo, etc.).
En mi proyecto, terminé con ambos
<inheritdoc/>
(para DocFX) y<include/>
(Para publicar paquetes NuGet y para validación en Visual Studio):fuente