2009-04-28 13 views
3

プライベートローカル変数にアンダースコアを使用するのはBCLの場合のようです。私はそれらを使用することはありませんが、このように離れてください:プライベートローカル変数の下線?

int count = 0; 

this.Count++; 

public int Count 
... 

public ClassName (int count) 
{ 
    this.Count = count; 
} 

これについてのご意見はありますか?彼らは私のアプローチに問題がありますか?

+2

...他の誰かが、それはあまりにも難読化されるべきではないと、後で自分のコードを維持しなければならない場合があることに注意してください。 –

+0

http://stackoverflow.com/questions/450238/to-underscore-or-to-not-to-underscore-that-is-the-questionに似ています –

+0

この質問は間違いなく主観的ですが、わかりません議論についてOPは彼女のアプローチに問題を抱えています。いくつかの潜在的な問題があり、彼らは探検する価値があります。私はこの質問が純粋に評判であると信じる傾向がありますが、そのメリットはあります。 –

答えて

3

これは基本的には自分で決めなければならないことですが、スタイルガイドを見つけたり、それに従ったりしてください。

個人的には、クラスのプライベートフィールドの接頭辞として_を使用します。

1

プライベート変数を示すのにアンダースコアを使用する必要はありません。それはすべて個人的な好みです。私はそれらを使うので、Intellisenseに私のpublicプロパティを誤って使用させるのではなく、ローカル変数を使用していることがわかります。

1

IMOの場合、プライベートメンバー変数には、そのプロパティ、メソッドなどの名前と同じ名前を付けないでください。どの名前付きアイテムで作業しているかは明らかです。これにより、コードの理解と維持が容易になり、コードを維持する必要がある開発者や開発者自身がプログラミングエラーを減らすことができます。

また、コードをVBに移植する場合は、その特定の名前は機能しません。 VBに切り替える理由は分かりませんが、それは起こります。

+0

VBポート以外は、なぜそれが不明だと思いますか?小規模な場合はプライベートですか?あなたは何か他のことを考えていたのですか? –

+1

私は非常に大きなクラスを見てきましたが、(複数の)画面にはインスタンス変数がたくさんあります。しかし、小さなクラスにリファクタリングする必要があるという症状です。妥当な量のプライベート状態変数を持つ小さなクラスでは、接頭辞のないインスタンス変数は非常に保守が容易であり、理解しやすい。 –

+0

マイケルありがとう、例を挙げてもらえますか?自分のアプローチを使って、名前を調べるだけでどのような変数の範囲を知ることができないのか分かりません。 –

1

私はアンダースコアを使用します。それは、可変スコープをチェックして、命名の衝突の可能性を減らすのに役立ちます。

1

アンダースコアは、VB.Netのように大文字と小文字を区別しない言語には意味があります。 C#のような言語では、純粋に個人的な好みになります。

あいまいな割り当ての前にthis.を入れることを嫌がる場合は、アンダースコアを使用します。それらがなければ、あなたは時折、誤ってこのようなことを行うことができます。

private int that; 

public void AssignThat(int that) 
{ 
    that = that; // assigns to method scope variable, not instance scope 
} 

FxCopのかR#があなたのためにこれをキャッチしなければならない、と私はあなたが、コンパイラ警告が表示されますが、それは可能であると考えてい

+1

はい、変数を自分自身に割り当てると、コンパイラの警告が表示されます。 – Albic

+0

@Albic、ありがとう。 R#はいつも私のためにこれらを修正することを提案するので、私はコンパイル部分には決して行きません。 –

0

接頭辞IntelliSenseを使用する実用的な理由があります。 ATMでは、現在のインスタンス変数と継承されたプロパティ/変数を実際には区別しないようにブレーンダム化されています。したがって、プライベート変数に '_'を使用すると、VSコードエディタのIntellisenseリストと関数/変数リスト内で変数を見つけるのが簡単になります。したがって、それはより広い範囲のハンガリー表記です。

2

ここで使用する単純なルールは次のとおりです。クラスのプライベートな実装の詳細(変数名を含む)は、作成する開発者によって異なります。パブリック/保護されたメソッド名、プロパティ、クラス名などは、ベストプラクティスのガイドラインの対象です。内部型は、公開されていないため、これの一部であるとみなすこともできます。

他の誰かがあなたのライブラリを使用する必要があるとき、それは内部型または私的型では動作しません。アンダースコアを使用するかどうかはわかりません。つまり、これは本当にあなた次第です...

だけでは、インスタンス変数の命名規則について合意を得ることはありません