method - c# multiple inheritance
Herencia de comentarios para C#(en realidad cualquier idioma) (7)
Java tiene esto, y lo uso todo el tiempo. Solo haz:
/**
* {@inheritDoc}
*/
Y la herramienta Javadoc lo resuelve.
C # tiene un marcador similar:
<inheritDoc/>
Puede leer más aquí:
http://www.ewoodruff.us/shfbdocs/html/79897974-ffc9-4b84-91a5-e50c66a0221d.htm
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 incluir automáticamente los comentarios de cada miembro en una clase base o interfaz?
¡Porque odio volver a escribir los mismos comentarios para cada subclase derivada!
Otra forma es usar la etiqueta XML doc. Esto es un esfuerzo extra pero funciona de la caja ...
Aquí hay unos ejemplos:
/// <summary>
/// Implementation of <see cref="IFoo"/>.
/// </summary>
public class Foo : IFoo
{
/// <summary>
/// See <see cref="IFoo"/>.
/// </summary>
public void Foo() { ... }
/// <summary>
/// See <see cref="IFoo.Bar"/>
/// </summary>
public void Bar() { ... }
/// <summary>
/// This implementation of <see cref="IFoo.Snafu"/> uses the a caching algorithm for performance optimization.
/// </summary>
public void Snafu() { ... }
}
Actualizar:
Ahora prefiero usar /// <inheritdoc/>
que ahora es compatible con ReSharper.
Resharper tiene una opción para copiar los comentarios de la clase base o interfaz.
Siempre puede usar la <inheritdoc />
.
public class Foo : IFoo
{
/// <inheritdoc />
public void Foo() { ... }
/// <inheritdoc />
public void Bar() { ... }
/// <inheritdoc />
public void Snafu() { ... }
}
Terminé creando una herramienta para postprocesar los archivos de documentación XML para agregar soporte para reemplazar la etiqueta <inheritdoc /> en los archivos de documentación XML. Disponible en www.inheritdoc.io (versión gratuita disponible).
GhostDoc hace exactamente eso. Para los métodos que no son heredados, intenta crear una descripción fuera del nombre.
FlingThing () se convierte en "Flings the Thing"
Actualizar. Use /// <inheritdoc/>
si quiere herencia. Evita GhostDoc o algo así.
Estoy de acuerdo en que es molesto que los comentarios no sean heredados. Sería un complemento bastante simple para crear si alguien tuviera el tiempo (ojalá lo hubiera hecho).
Dicho esto, en nuestra base de código ponemos comentarios de 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, tenemos comentarios completos que se muestran en intellisence.
GhostDoc es un buen comienzo y ha hecho que el proceso sea más fácil para escribir comentarios. Es especialmente útil mantener los comentarios actualizados al agregar / eliminar parámetros, volver a ejecutar GhostDoc y actualizará la descripción.