C#でプライベート変数にどのように名前を付けますか?[閉まっている]


25

C#のプライベート変数で最も一般的に受け入れられている命名規則のベストプラクティスは何ですか?

  1. private int myInteger;
  2. private int MyInteger;
  3. private int mMyInteger;
  4. private int _myInteger;
  5. private int _MyInteger;
  6. 神秘的な他のオプション

どちらを使用しますか?(私の会社はC#にかなり慣れていないので、コーディング業界の標準に入るために最も「業界で受け入れられている」方法を選びたいと思います。)


自動実装プロパティを使用しないのはなぜですか?msdn.microsoft.com/en-us/library/bb384054.aspx
カイルバラード

1
C#は、このための基準を持って、見stackoverflow.com/questions/14967/...
タマラWijsman

7
パブリック変数についてプライベート変数について話すのは良くありません。申し訳ありませんが、しなければなりませんでした。
マークC

メソッドのローカルスコープ内でのみ_someVariableを使用することを除いて、azheglov(m_someVariable)と同じものを使用します。
lord-fu

7
@Markそれが示唆的であるためには「プライベートメンバー」であるべきだと思います。
EpsilonVector

回答:


44

MSDNクラスデザインガイドラインhttp://msdn.microsoft.com/en-us/library/ta31s3bc.aspxでは、オプション1-myIntegerを推奨しています。

私はいつもこのスタイルを使用しています。私は_文字が嫌いです。


1
resharperがインテリジェンスに中間文字列のマッチングを追加するまで、私は_文字を嫌っていました。今、私は入力することができmyInteger、それが一致し_myIntegerます。しかし、MSDSが_を使用しないと言っていることは知りませんでした
ヴァッカノ

4
オプション1を使用する場合myInteger、メソッドのローカル変数かプライベートクラスメンバーかをどのように確認できますか?
Wizard79

4
@Lorenzo this.myInteger;)
TWith2Sugars

12
しかし... ...「this」は4文字で、「_」は1文字だけです!実際、このガイドラインは非常に理にかなっていますが、私のオフィスでは誰もがアンダースコアを愛し、何らかの理由で「this.Foo」を見るのが嫌いです。時には重要な唯一のガイドラインは、職場があなたに強いるガイドラインだけです。
CodexArcanum

2
文字数に関する議論は議論の余地があります。this同じ名前のローカル変数が存在するメソッドでのみ、毎回入力する必要はありません。ただし、アンダースコアを使用する場合は、毎回余分なシンボルを記述する必要があります。私が同意しているのは、ローカルコードスタイルの契約を守ることが常に重要だということです。
マルコム

25

上記のオプション#4を使用します。

private int _myInteger;

変数名にスコープを示すものがありますが、そのためにはアンダースコアで十分です。また、非常に読みやすくなっています。


5
特にいくつかの変数を操作する必要がある場合、読みやすいことに同意しません。
-Restuta

15

次の命名スキームを使用します。

  • ローカルスコープ変数の1番目(myInteger)
  • パブリックプロパティの2番目(MyInteger)
  • プライベート変数の4番目(_myInteger)

14

オプション4は実際に最も読みやすいオプションだと思います。これを行う必要がなくなります。

public Person(string name, int age) 
{
    this.name = name;
    this.age = age;
}

また、すべてのプライベートメンバーがより顕著になります。次の例では、一体ageどこから来たのでしょうか?this修飾子なしでは、わかりにくいです。

private void Method()
{
    var x = 2;
    var y = age + x;
}

これは理解しやすい方法です:

private void Method()
{
    var x = 2;
    var y = _age + x;
}

1
以前は最初の例で誓っていましたが、しばらくオプション4を試した後、プライベートフィールドのプレフィックスとしてアンダースコアを使用することを好みます。
ジェレミーウィーベ

2
プライベート変数には1を使用し、プロパティで使用するプライベート変数には4を使用します。
エヴァンプライス

2
ChaosPandoinに反対する必要があります。私にとって、Method()の両方の実装は読みやすいです。age変数(または_age)が表示され、メソッドで宣言されていないことに気づいたらすぐに、クラスの他の場所で宣言する必要があることに気付きます。this修飾子はひどいですが、少なくともコンストラクターメソッドに限定されています。
デビッドケネディ

10

最初に、PascalCasingは一般にクラスのパブリックプロパティ、const、メソッドなどのために予約されています。したがって、2と5はスキップします。

第二に、ハンガリーの表記法は.NETの世界では推奨されていません。それが3で起こっていると仮定します。

camelCasingと_camelCasingが残ります。通常、クラス変数には_camelCasingを使用し、メソッドまたはそれより狭いスコープの変数には単純な古いcamelCasingを使用します。キャメルケーシングは、メソッド引数、保護/プライベート変数名、およびメソッドまたはより狭いスコープ内の変数に使用される標準です。

また、プライベート変数がインテリセンスでグループ化されるように、アンダースコアを追加するのも好きです。ただし、これは型をスコープとする変数に対してのみ行います。メソッドまたはより狭いスコープ内で宣言された変数は、アンダースコアをオフのままにします。それらを別々に保ち、あまり使用されない変数を一緒に保つことを簡単にします。


2
通常、クラス変数であることは明らかなので、クラス変数に_camelCasingを使用する理由はわかりません。
代替案

1
@mathいいえ、インテリセンスでは明らかではありません。フィールド(クラススコープの変数)には、メソッドスコープの変数と(ほぼ)同じアイコンが付いているため、よく見るとまったく同じように見えます。アンダースコアはそれらを視覚的に区別し、それらをグループ化するのに役立ちます。これは、頻繁に使用しない場合に役立ちます(状態がバグのないプログラミングの敵であるはずがないため)。
食い物

私はインテリセンスについて何も言わなかった。Color.ClassMethod()とmyColor.InstanceMethod()の違い、つまり、Colorはクラスなので、ClassMethod()はクラスメソッドであることは明らかです。
代替案

@math you before: I don't understand why you would use _camelCasing for class variables you after: I'm talking about the difference between Color.ClassMethod() and myColor.InstanceMethod()混乱してすみません。聞いてください、私はクラス変数をめったに使用しないので、_を押してそれらをすべてインテリセンスでポップアップしてグループ化することで、その名前を思い出すことができます。
食い物

2
@mathepic:Willが「クラス変数」と言うとき、彼は(プライベート)インスタンスフィールドを意味します。あなたは彼が静的メンバーを意味すると言ったことを解釈したようです。しかし、それは彼が言ったことではありません。
ダン・タオ

4

private int integer

メソッドスコープのメンバー変数とローカル変数が混同される場合は、おそらくリファクタリングが必要です。


+1:それがポイントだと思う。ところで:私はそのソースを参照してください、しかし、名前integerは多分もっと言い換えられるかもしれませんvalue
ウルフ

2

(とにかくC#/。netで)それを行う最良の方法は2と6の組み合わせだと思います:

private int MyInteger { get; set; }

ここには変数はまったくありませんが、プライベートインスタンス変数のように見え、動作します。その値にビジネスロジックを追加する必要がある場合(これは完全に内部的な値なので、やりたいことは何でもできます)、既に「プロパティ化」されています。熱い蒸しカップ!


2

オプション#4を実行するのは、それがSSCLIのように見えるためです。しかし、正直なところ、プライベート変数の命名についてはあまり気にしません。パブリックは別の話です。

ところで、m_MyIntegerを忘れてしまった


2

私はそれを「私の」とは呼ばないでしょう!

しかし、私は言うだろう

class C
{
     int VariableName { get; set; }
}

多くの場合、これは明示的な変数を持つよりも優れています。明示的なプライベート変数があった場合、それを呼び出しますint _variableName;


1

C ++では、エディターを頻繁に切り替えるため、_を使用する傾向があります。

C#の場合、Visual Studioでプライベートであるかどうかを確認できるため、_を残す傾向があります。

私はこれを行うためにキャメルケースの方法を使用する傾向があります。


1

私は4(private int _myInteger;)を使用します:

private int myInteger;

これがローカル変数の命名方法です。

private int MyInteger;

これは私が定数に名前を付ける方法です。

private int mMyInteger;

これはC#スタイルではありません。

private int _MyInteger;

これは奇妙に見えます。


1

アンダースコア付き。

ビル・ワグナーは、Effective C#でその理由を説明しています。しかし、整数Integerという名前を付けることはありません。インスタンス名にTypeNameを含めるのは恐ろしい習慣です。名前は自明である必要があり、C#はタイプセーフであるため、型は常にattを見つけることができます。


1
ええ、それは例でした。
ヴァッカノ

1

より具体的な例を挙げる必要がありますが、次のとおりです。

private int countprivate int badFileCountprivate static readonly int ReconnectAttemptsLimit

ところで、最新かつ最高のをインストールして使用を開始すると、このすべてが無料になりますMSFT Stylecop


0

私はオプション5で行きます: private int _MyFoo

ただし、_myFooに対する実際の競争上の優位性は見当たりません。


0

次のようなプライベート変数にcamelCasingを使用します myInteger

_混乱を減らすために
変数_myPropertyがプロパティのバックアップである場合、前述のことを考慮してください- プロパティの変数MyProperty


0

私はReSharperに自分の変数名を付けました。これは私のものだけでなく、他の人も同様です。プロジェクト全体でかなりの一貫性があります。


0

Juval LowyのIDesign C#Coding Standardは非常に人気があります。この標準では、プライベートメンバー変数の前に「m_」を付加することを推奨しています(オプション6)。それが私たちのチームでやっていることです。

private int m_myInteger;

オプション4(_myInteger)は、この標準の許容可能なバリエーションです。

MSDNの推奨事項(myInteger)が気に入らなかったのは、ローカル変数からプライベートメンバーに伝えることが困難になるためです。もちろん、私たちの推奨事項は、プライベートメンバーをthisで修飾することでこの問題を解決します。

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