44

ここで「」と呼んでいるプライベートメソッドに名前を付けるための規則はあり_Addますか?私は主要なアンダースコアのファンではありませんが、チームメートの1人が提案しているものです。

public Vector Add(Vector vector) {
    // check vector for null, and compare Length to vector.Length
    return _Add(vector);
}

public static Vector Add(Vector vector1, Vector vector2) {
    // check parameters for null, and compare Lengths
    Vector returnVector = vector1.Clone()
    return returnVector._Add(vector2);
}

private Vector _Add(Vector vector) {
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}
4

13 に答える 13

35

パブリックメソッドとプライベートメソッドを区別するC#のコーディング規約を見たことがありません。メリットが見当たらないので、そうすることはお勧めしません。

メソッド名がパブリックメソッドと競合する場合は、よりわかりやすくする必要があります。あなたの場合のように、パブリックメソッドの実際のメソッド実装が含まれている場合、1つの規則はそれを呼び出すこと*Implです。つまりAddImpl、あなたの場合。

于 2008-12-20T23:04:32.647 に答える
33

私は通常、プライベート メソッドには thisCase を使用し、パブリック メソッドには ThatCase を使用します。

private Vector add(Vector vector) {
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}

public Vector Add(Vector vector) {
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}
于 2008-12-20T23:16:43.497 に答える
31

私は通常、「AddCore」または「InnerAdd」のいずれかを見て使用します

于 2008-12-20T23:22:55.433 に答える
15

個人的には、メソッドについては、可視性に関係なく同じ命名規則があります。

これらは、C#の命名規則です。

  • 名前空間、タイプ、メソッド、プロパティ:PascalCase
  • ローカル変数:キャメルケース
  • メソッドのパラメーター:camelCase
  • プライベートフィールド:アンダースコアプレフィックス付きの_PascalCase、プロパティのバッキングフィールドの場合は、アンダースコアプレフィックス付きのプロパティと同じ名前

編集:注、私はプライベートメソッドにプレフィックス名を使用することで罪を犯しています。初めて読んだとき、あなたの質問のその特定の部分を聞き取れませんでした。

たとえば、QueryDataTable、QueryEnumerable、QueryDataReaderなど、DatabaseCommandクラスを介してSQLステートメントを実行する7つの異なる方法がある場合、QueryEnumerable<T>これらすべてが同じプライベートメソッドを呼び出したい場合、このメソッドをInternalQueryと呼ぶ傾向があります。またはPrivateQuery。

于 2008-12-20T23:11:01.107 に答える
6

一般的に使用されている 2 つのバリエーションは次のとおりです。

private Vector DoAdd(Vector vector) { ... }

private Vector AddImpl(Vector vector) { ... }

どちらも特に満足できるものではありませんが、私が見たものです。

すべてのプライベート メソッドにプレフィックスを付ける必要があるという規則を見たことがありません。

すべてのメンバーの前に「_」を付ける C++ 開発者を扱うのは十分に悪いことです。私は、以前はすべてのメンバーに「F」を付ける前の Delphi 開発者として話しています。私はまだそこから回復しています!

于 2008-12-22T03:11:33.833 に答える
6

public Add() はいくつかのチェックを行い、private は行わないため:

private Vector AddUnchecked(Vector vector) {
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}
于 2008-12-21T12:04:41.653 に答える
3

プライベートプロパティに先頭の下線を使用することは非常に一般的ですが、メソッドで行われるのを見たことがありません

于 2008-12-20T23:08:43.420 に答える
3

公開メソッド:

public void Add()
{
}
this.Add()

プライベート メソッド:

private void _Add()
{
}
_Add();

プロパティ:

public int Id {get;set;}
this.Id = 10;

田畑:

private bool _isUsed;
_isUsed = false;

ローカル変数:

bool isUsed;
于 2010-10-28T18:32:53.277 に答える
2

チームメイトが提案したことは何でも採用し、それをチーム内の慣習にしました。しかし、特定のケースでは、それを回避できるように見えます:

public Vector Add(Vector vector) {
    // check vector for null, and compare Length to vector.Length
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}

public static Vector Add(Vector vector1, Vector vector2) {
    // check parameters for null, and compare Lengths
    Vector returnVector = vector1.Clone()
    return returnVector.Add(vector2);
}

それとも、こんなに遅くまで SO に参加するべきではないのかもしれません...

于 2008-12-20T23:14:33.797 に答える
1

ほとんどの慣習では、私的なものにはもっと自由があると思います。しかし、私はこれをよく見ます:

private Vector AddCore(Vector vector)

また

private Vector DoAdd(Vector vector)

ただし、おそらくプライベートaddメソッドを削除して、次の1つだけにします。

public static Vector Add(Vector vector1, Vector vector2) 
{
    // check if vector1 is null
    Vector returnVector = vector1.Clone()
    return returnVector.Add(vector2);
}

public Vector Add(Vector vector) 
{
    // check parameters for null, and compare Lengths
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}

また、それらの中かっこを適切な場所に配置します:-)

于 2008-12-20T23:06:20.180 に答える
1

EPiServer は、AddInternal()この状況のように "...Internal" の規則を使用します。

于 2015-07-07T19:09:00.370 に答える
0

メソッド名を記述して、それ自体を説明するコードを作成します。まったく同じことを行う2つのメソッドがないため、衝突が発生しないようにする必要があります。したがって、メソッド名の前に文字を付ける必要はありません。

プライベートフィールドの前に「m_」を付ける人もいますが、プライベートメソッドに似たスタイルは見たことがありません。

于 2008-12-20T23:08:54.743 に答える
0

残念なことに、私はこの慣例に何度も遭遇しましたが、フォーム上のコントロールの名前の先頭にアンダースコアを付ける傾向があります (たとえば、"txtFirstname" ではなく "_txtFirstname" など)。これは、先頭にアンダースコアを付けてプライベート変数に名前を付けるという、MS が推奨しなくなった慣行からの奇妙なブリードオーバー効果のようです。それか、プログラマーは私が理解できない理由でアンダースコアキーを使用するのが大好きです。

この慣習を使用しないでください。同僚がそれを主張する場合は、オンラインでこの慣行を推奨する何か (何でも) を見つけるように彼に挑戦してください。

于 2008-12-20T23:54:57.833 に答える