2

MSDN の命名ガイドラインを読みましたが、一般的にアンダースコアを避けるようにする必要があることを除いて、明確な答えが見つかりませんでした。私が次のものを持っているとしましょう:

public class Employee
{
    private string m_name;  //to store property value called Name

    public string Name
    {
        get { return m_name; }
        set { m_name = value; }
    }

    public void ConvertNameToUpper()
    {
        //by convention should you use this
        return m_name.ToUpper();

        //or this
        return Name.ToUpper(); 
    }
}

上記の m_name の適切な命名規則は何ですか? たとえば、私が継承するコードでは、一般的に次のように表示されます。

  • m_name
  • _名前
  • 名前
  • myName またはその他のランダムな識別子

最も一般的に受け入れられているのはどれですか?

フォローアップとして、クラスのメソッドで、内部 (プライベート) 識別子またはパブリック プロパティ アクセサーを参照しますか?

4

14 に答える 14

14

どのような命名規則を使用する場合でも、最も重要なことは一貫性を保つことだと思います。つまり、プライベート メンバーに _name のような名前を付けることを選択した場合、一度 _name を使用し、もう 1 度は m_name を使用する代わりに、常にこのようにします。私は個人的にアンダースコアプレフィックス規則を使用しています。(理由の 1 つは、NHibernate を使用しており、NHibernate には「field.camelcase-underscore」アクセス戦略があるためです。

あなたの他の質問について:それはあなたが何をしたいかによって異なります。
プロパティに追加のロジックが含まれています。参照時にこのロジックを実行しますか? 次に、プロパティを使用します。ロジックを実行したくないですか?フィールドを使用します。Eric Lippert は、これに関する投稿を彼のウェブログに書いています。

あなたのフォローアップのために:それはすべて状況に依存します. プロパティに追加のロジックが含まれていて、クラス内からアクセスしたときにその追加のロジックを実行したくない場合は、バッキング フィールドを使用します ...

于 2009-01-21T20:54:11.800 に答える
5

まず第一に、単純な get/set のケースでは、自動的に実装されたプロパティを使用することをお勧めします。これを行うと、コンパイラは基になる変数を生成し、プロパティ自体のみを参照します。

それ以外は、上記のいずれかまたは類似のものを選択して、それに固執することをお勧めします. 私が働いている会社では、vName を使用しています。「v」は、これがプロパティの値であることを示しています。

于 2009-01-21T20:52:03.397 に答える
4

コードにいくつかのスタイルを適用するStyleCopを使用します。これは非常に便利で、チームメンバー全員もこれを使用しています。

スタイルコップの使用については素晴らしい議論がありますが、私が提案することの1つは、スタイルコップを使用する場合、すべてのスタイルを有効のままにすることです。このようにユーザー間で共有すると、作業が非常に簡単になります。

これが強制することの1つは、プライベートフィールドにアンダースコアを付けて名前を付けることができないことです。したがって、私は通常、プライベートフィールドを作成するときにキャメルケースを使用し、次にパブリックプロパティにPascalCaseを使用します。

private string name;
public string Name
{
    get { return this.name; }
    set { this.name = value; }
}

スタイルコップはまた、this.物事をはるかに読みやすくする使用を強制します。

于 2009-06-07T18:42:46.637 に答える
3

サンプル コードで見た最も一般的なものは、単純な _ プレフィックスです。

ただし、本当に重要なことは、チームが標準とは何かに同意し、それに固執することです。

于 2009-01-21T20:52:53.007 に答える
2

Brian Rasmussenが提案するように、自動的に実装されたプロパティを使用できず、プライベートメンバーが必要な場合は、アンダースコアプレフィックス_nameをお勧めします。

インテリセンスでは、アイテムがすべて同じシンボル(青い立方体)を持っているため、アイテムがパラメーターであるか、ローカルメンバーであるかプライベートメンバーであるかはすぐにはわかりません。ただし、カーソルを特定のアイテムに移動すると、ツールチップにそれらのアイテムが表示されます。

アンダースコアプレフィックスは、カーソルを移動しなくてもプライベートメンバーであることをすぐに明らかにする便利な視覚補助であることがわかりました。

于 2009-01-21T20:55:09.677 に答える
1

以前は「_」プレフィックスに非常に反対していましたが、多くの文字を入力せずにメンバー フィールドにすばやくアクセスしたい場合に、IntelliSense を使用すると非常に便利です。

于 2009-01-21T22:04:46.027 に答える
0

一般的に受け入れられている命名規則は、名前を意味のあるものにすること(そしてコードをクリーンでシンプルにすること)だけだと思います。私の意見では、コード内の識別子が何らかの理由で視覚的な手がかりを必要とする場合、それは複雑すぎて、名前は通常完全に正確ではありません。

読むだけでマニュアルが必要なコードに取り組んできました...「m」はクラスレベルを意味し、「p」はパラメータを意味します。命名規則はコードを読みやすくするために開発されましたが、結局は開発者は、「適切な」命名規則が読み取り可能なコードを意味するという含意を持って実行したため、反対です。

このデニスグリーン(元アリゾナカージナルコーチ)の引用があなたの識別子に適用されることを確認してください:「彼らは私たちが思っていた人です!」

于 2009-01-21T21:50:39.583 に答える
0

プロパティが読み取り専用である場合や、設定ロジックをバイパスしたい場合など、必要な場合にのみメンバー変数にアクセスしようとします。

この理由の1つは、後でセッターにロジックを追加する場合、どこでも使用できるようにする可能性が高いためです。

于 2009-01-21T21:51:05.323 に答える
0

一方では、会社の標準を使用する必要があることに同意します。他方では、業界標準に準拠しようとします。

于 2009-01-21T20:56:09.927 に答える
0

まず第一に、私と私が一緒に働いた他の多くの人々は、プライベートメンバーの前に「m_」を付けることをやめました。次に、クラス内のプライベートメンバーを参照するときは常に、「this.privateMemberVariableName」のようにthisという単語を使用します。これを使用することで、変数がローカル変数ではないか、メソッド内でパラメーターとして渡された変数ではないことを区別するのに十分です。

接続のインスタンス化やビューステートでのプロパティ値の保存など、プライベートメンバー変数を参照するだけではないロジックが含まれている場合は、パブリックプロパティ名を参照します。

于 2009-06-07T20:49:48.783 に答える
0

フレームワークの設計ガイドラインの本では、変数の前に_を付けるべきではないと述べています。変数の名前には小文字を使用する必要があります。CodeComplete2nd editionでは、変数の前にm_を付けるべきではないと思います。

于 2009-06-07T20:54:15.950 に答える
0

パブリックインターフェイスのガイドライン(つまり、プロパティ名、パブリックメソッド、パブリックメソッドの引数など)しかないため、MSDNの命名ガイドラインではこれを指定していないことを付け加えたいと思います。プライベートメンバーのスタイルは気にしません。 、Microsoftに関する限り、あなたとあなたのチームが望むものは何でも使用できます。

于 2009-06-07T18:55:24.163 に答える
0

チームが使用するスキームに固執するか、チームに所属していない場合は、使用するものと一貫性を保つ必要があるという点で、以前の回答を繰り返します。

個人的には、アンダースコアのプレフィックスを使用しています。視覚的な手がかりが得られるからです。

于 2009-01-21T21:04:16.087 に答える
0

クラスレベル変数の場合、コーディング標準では、mVariableName または m_VariableName を使用すると規定されています。主なことは、あなたの会社/教師/などに従うことです。コーディング標準/慣行。

個人的には、ゲッター/セッターがある場合にのみ変数にアクセスします。変数がクラス内でのみ使用される場合でも、自動プロパティを使用します。このようにして、抽象化のレイヤーを追加します。これは、何かを変更した場合にリファクタリングするコードが少なくなることを意味します。

ところで、あなたのvoid関数は文字列を返すことができません..... :-)

于 2009-01-21T22:59:29.413 に答える