[c#] C #에 대한 주석 상속 (실제로 모든 언어)

이 인터페이스가 있다고 가정합니다.

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

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

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

그리고이 수업

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

방법이 있습니까, 아니면 기본 클래스 또는 인터페이스에서 각 멤버의 주석을 자동으로 입력 할 수있는 도구가 있습니까?

파생 된 각 하위 클래스에 대해 동일한 주석을 다시 작성하는 것을 싫어하기 때문입니다!



답변

GhostDoc 은 정확히 그렇게합니다. 상속되지 않는 메서드의 경우 이름에서 설명을 만들려고합니다.

FlingThing() 된다 "Flings the Thing"


답변

언제든지 <inheritdoc />태그를 사용할 수 있습니다 .

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


답변

/// <inheritdoc/>상속을 원하는 경우 사용하십시오 . GhostDoc 또는 이와 유사한 것을 피하십시오.

댓글이 상속되지 않는다는 것이 귀찮다는 데 동의합니다. 누군가가 시간을 가졌다면 만드는 것은 상당히 간단한 추가 기능 일 것입니다.

즉, 코드베이스에서 인터페이스에만 XML 주석을 넣고 클래스에 추가 구현 주석을 추가합니다. 이것은 우리의 클래스가 비공개 / 내부이고 인터페이스 만 공개되기 때문에 우리에게 효과적입니다. 인터페이스를 통해 객체를 사용할 때마다 전체 주석이 지능적으로 표시됩니다.

GhostDoc은 좋은 시작이며 프로세스를 주석 작성하기 쉽게 만들었습니다. 매개 변수를 추가 / 제거하고 GhostDoc을 다시 실행할 때 주석을 최신 상태로 유지하는 것이 특히 유용하며 설명을 업데이트합니다.


답변

Java에는이 기능이 있으며 항상 사용합니다. 그냥 해:

/**
 * {@inheritDoc}
 */

그리고 Javadoc 도구가이를 파악합니다.

C #에는 비슷한 마커가 있습니다.

<inheritDoc/>

여기에서 자세한 내용을 읽을 수 있습니다.

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


답변

나는 직접 사용한다고 말할 것입니다

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

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

이 주석은 클래스 / 메소드의 이전 줄에만 넣어야합니다.

예를 들어 다음과 같이 문서화 한 인터페이스에서 댓글 정보를 가져옵니다.

    /// <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);


답변

Resharper에는 기본 클래스 또는 인터페이스에서 주석을 복사하는 옵션이 있습니다.


답변

또 다른 방법은 <see />XML 문서 태그 를 사용하는 것 입니다. 이것은 약간의 추가 노력이지만 기본적으로 작동합니다 …

여기 몇 가지 예가 있어요.

/// <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() { ... }
}

최신 정보:

이제 /// <inheritdoc/>ReSharper에서 지원하는 것을 선호합니다 .