web-dev-qa-db-ja.com

プライベートメソッドの命名規則

私が呼び出したプライベートメソッドの命名規則はありますか "_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;
}
39
jason

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

29
TheSoftwareJedi

私は通常、プライベートメソッドには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;
}
28
Andy May

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

メソッド名がパブリックメソッドと競合する場合は、よりわかりやすくする必要があります。あなたのケースのように、実際のメソッドimplementationがpublicメソッドに対して含まれている場合、1つの規則は*Implと呼ぶことです。つまりあなたの場合、AddImpl

25
Konrad Rudolph

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

これらはC#の私の命名規則です:

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

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

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

15

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

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

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

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

そして

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

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

すべてのプライベートメソッドにプレフィックスを付ける必要があるという規約を見たことはありません。単に考えただけで身震いします。

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

5
Bevan

プライベートプロパティの先頭にアンダースコアを使用することは非常に一般的ですが、メソッドでこれを実行したことはありません。

3
cgreeno

パブリックメソッド:

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

プライベートメソッド:

private void _Add()
{
}
_Add();

プロパティ:

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

田畑:

private bool _isUsed;
_isUsed = false;

ローカル変数:

bool isUsed;
3
Y.Yanavichus

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

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;
}

また、これらの中かっこを正しい場所に置きます:-)

1
Greg Dean

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

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この後半にいるべきではありません...

1
PEZ

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

0
user3638471

ああ、なぜ私がこれをするのかを言及するのを忘れていました。それは、順番に呼び出したいメソッドのループを使用して処理を作成する簡単な方法だからです。たとえば、毎回少しずつ異なる検証を行う必要があるが、同じクラスのメソッドを使用している場合などです。私はそれらを次のように設定しました

add_process = array(1,2,3);
delete_process = array(2,6,4);

//delete user, users  posts and users comments
foreach( process2 as value){
 method_{value}_delete
} 
0
Carl McDade

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

一部の人々はプライベートフィールドの前に "m_"を付けています。プライベートメソッドの同様のスタイルは見たことがありません。

0
Paul

残念ながら、この規約には、先頭にアンダースコアを付けたフォームのコントロールに名前を付ける傾向(たとえば、 "txtFirstname"ではなく "_txtFirstname")に遭遇しました。これは、MSで推奨されていない、プライベート変数に先頭にアンダースコアを付けるという慣行からの奇妙な影響のようです。それ、またはプログラマーは、私が理解できる理由もなく、単にアンダースコアキーを使用するのが好きです。

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

0
MusiGenesis