プロパティのXMLドキュメントには「取得または設定..」が必要ですか?


19

C#でのXMLコメントのベストプラクティスの推奨事項を探しています。プロパティを作成すると、予想されるXMLドキュメントは次の形式になっているようです。

/// <summary>
/// Gets or sets the ID the uniquely identifies this <see cref="User" /> instance.
/// </summary>
public int ID {
    get;
    set;
}

しかし、プロパティのシグネチャはすでにクラスの外部クライアントが使用できる操作を示しているため(この場合は両方getset)、コメントはおしゃべりすぎて、おそらく次のようになります。

/// <summary>
/// ID that uniquely identifies this <see cref="User" /> instance.
/// </summary>
public int ID {
    get;
    set;
}

Microsoftは最初の形式を使用しているので、暗黙の慣習のようです。しかし、私が述べた理由のために、2番目の方が優れていると思います。

この質問は建設的ではないとマークされるのが得意であると理解していますが、コメントしなければならないプロパティの量は膨大であるため、この質問にはここにある権利があると思います。

アイデアや公式の推奨プラクティスへのリンクに感謝します。


正直なところ、コードにないコメントが私に与える唯一のことは(これがUserのメンバーであると仮定して)IDが一意であることです。そのため、「必要」ではありません。
jk。

@Tomas- GhostDocプラグインをインストールしましたか?あなたが開始すると、自動的に置くために良いプロパティ名を使用する場合、それはあなたのために良いXMLコメントを生成しますgets or setsgetsプロパティアクセサに依存します。
トレバーピリー

@Trevor-インストール済みです。テンプレートを変更して「取得または設定」を削除するかどうかを考えていました:)。しかし、それは素晴らしいプラグインです。
トマス

文書化解除の世界へようこそ。
パニック大佐

回答:


28

署名は、他のコード部分にどの操作が利用できるかを伝える場合があります。ただし、コーダーが作業しているため、それらはコーダーに明確に表示されず、XML文書はコンパイラーではなく消費者を対象としています。

このクラスを例に取ります:

public class MyClass
{
    /// <summary>
    /// The first one
    /// </summary>
    public int GetOrSet { get; set; }

    /// <summary>
    /// The second one
    /// </summary>
    public int GetOnly { get; private set; }

    /// <summary>
    /// The last one
    /// </summary>
    public int SetOnly { set; private get; }
}

これらのプロパティの1つにアクセスするためにIntelliSenseがプルアップされている場合、どのプロパティに書き込み、読み取り、またはその両方を行うことができるかは示されていません。

ここに画像の説明を入力してください

同様に、ドキュメントを表示するとき、私たちもよくわかりません:

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください

そのため、我々は追加を取得または設定取得、または設定したコードを書きながら、プログラマにそれを容易にします。確かに、一部のデータを読み取って処理するだけのコードの大きなブロックを作成して、期待どおりにそのデータをプロパティに書き戻せないことを確認するだけではありません。

ここに画像の説明を入力してください


徹底的な回答をありがとう。残念ながら、これらはVisual Studio IDEの制限事項だと思います。私はそれについて考えました、そして、インテリセンスはどのプロパティが例えばget現在のコンテキストでのみであるかをあなたに示すことができると思います。特定の開発環境に合わせてドキュメントを曲げることはあまり便利ではありません。それでも、Visual StudioとC#は非常に密接に関連しているため、これが正しいソリューションである可能性があります。
トマス

1
@Tomas Visual Studioをさらに区別する必要があることに同意します。間違ってプロパティを使用する2番目の行に赤い波線を与えてくれることは確かに幸せです。
マイク

2

StyleCopは、Gets or Sets ...ルールSA1623で強制する表記法を使用します。

リンクされたページには、リストしていない別のケースがリストされます。

/// <summary>
/// Gets a value indicating whether the item is enabled.
/// </summary>
public bool Enabled
{
    get { return this.enabled; }
}

リストする他のオプションはそうなります。

/// <summary>
/// ID that uniquely identifies this <see cref="User" /> instance.
/// </summary>
public int ID { get; set; }

/// <summary>
/// ID that uniquely identifies this <see cref="User" /> instance.
/// </summary>
public int ID { get; }

プロパティが読み取り専用であるというインテリセンスのヒントに関する情報は提供されませんがGets ...、この場合にも慣習を考え出すことができますがGets or Sets...、仕事はうまくいきます。

StyleCopルールにリストされている他のバリエーションもありますが、これらはを使用することで明確にGets or Sets...なりますが、そうでない場合もあります。

また、DoxygenやSandcastleのようなものからドキュメントを生成する場合、完全な表記法によりAPIのドキュメント化が改善されます(たとえば)。


2

XMLコメントにプロパティの取得と設定に関する情報を追加するのは、期待どおりに動作しないときだけです(パブリックの取得と設定が直接行われます)。

プライベートであるか、追加のロジックが含まれている場合は、それらに言及します。それ以外の場合は、プロパティの意図を文書化します。


1

もっと冗長なバージョンの方が嬉しいです。

もう1つは、カウンタ変数をインクリメントした後に「インクリメントカウンタ」というコメントを付けるようなものです。

GetとSetがあることは明らかです。プライベートセッターがあれば、プライベートキーワードがあるので明らかです。

コメントは、コードが実際に何であるかのコメント版ではなく、価値を追加する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.