114 votes

Hériter des commentaires d'une interface dans une classe d'implémentation ?

Supposons que j'ai cette interface

public interface IFoo
{
    ///<summary>
    /// Foo method
    ///</summary>
    void Foo();

    ///<summary>
    /// Bar method
    ///</summary>
    void Bar();

    ///<summary>
    /// Situation normal
    ///</summary>
    void Snafu();
}

Et cette classe

public class Foo : IFoo
{
    public void Foo() { ... }
    public void Bar() { ... }
    public void Snafu() { ... }
}

Y a-t-il un moyen, ou y a-t-il un outil qui me permette de mettre automatiquement les commentaires de chaque membre dans une classe de base ou une interface ?

Parce que je déteste réécrire les mêmes commentaires pour chaque sous-classe dérivée !

190voto

Vadim Points 9146

Vous pouvez toujours utiliser la balise <inheritdoc /> :

public class Foo : IFoo
{
    /// <inheritdoc />
    public void Foo() { ... }
    /// <inheritdoc />
    public void Bar() { ... }
    /// <inheritdoc />
    public void Snafu() { ... }
}

En utilisant l'attribut cref, vous pouvez même vous référer à un membre entièrement différent dans une classe ou un espace de noms entièrement différent !

public class Foo
{
    /// <inheritdoc cref="System.String.IndexOf" />
    public void Bar() { ... } // this method will now have the documentation of System.String.IndexOf
}

18voto

James Curran Points 55356

GhostDoc fait exactement ça. Pour les méthodes qui ne sont pas héritées, il essaie de créer une description à partir du nom.

FlingThing() devient "Flings the Thing"

14voto

gatsby Points 320

Je dirais d'utiliser directement le

/// <inheritdoc cref="YourClass.YourMethod"/>  --> For methods inheritance

Et

/// <inheritdoc cref="YourClass"/>  --> For directly class inheritance

Vous devez placer ces commentaires juste sur la ligne précédente de votre classe/méthode

Cela permettra d'obtenir les informations de vos commentaires par exemple à partir d'une interface que vous avez documentée comme :

    /// <summary>
    /// This method is awesome!
    /// </summary>
    /// <param name="awesomeParam">The awesome parameter of the month!.</param>
    /// <returns>A <see cref="AwesomeObject"/> that is also awesome...</returns>
    AwesomeObject CreateAwesome(WhateverObject awesomeParam);

14voto

JeffHeaton Points 1503

Java a ça, et je l'utilise tout le temps. Il suffit de faire :

/**
 * {@inheritDoc}
 */

Et l'outil Javadoc le découvre.

C# a un marqueur similaire :

<inheritDoc/>

Pour en savoir plus, cliquez ici :

http://www.ewoodruff.us/shfbdocs/html/79897974-ffc9-4b84-91a5-e50c66a0221d.htm

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X