2009-04-17 13 views

答えて

11

いいえ、私は視覚的なノイズと考えています。私はこの変数が悪い命名スタイルに馬鹿だと思う。私のタイプでは、フィールド、プロパティ、メソッドの命名を管理できるはずです。

バッキングフィールドの名前を "myfield"とし、コンストラクタのパラメータを "myField"、プロパティを "myField"とする理由はまったくありません。

public class TestClass 
{ 
    private string myField; 
    public TestClass(string myField) 
    { 
     this.myField = myField; 
    } 
    public string MyField {get { return myField;} set {myField = value}} 
} 

個人的には、個人的に私のプライベートバッキングフィールドには必ず接頭辞_を追加します。 C#での自動プロパティあなたがこれを入力するだけで、他の時間多分上記以外

public class TestClass 
{ 
    private string MyField {get; set;} 
    public TestClass(string myField) 
    { 
     MyField = myField; 
    } 
} 

public class TestClass 
{ 
    private string _myField; 
    public TestClass(string myField) 
    { 
     _myField = myField; 
    } 
    public string MyField {get { return _myField;} set {_myField = value}} 
} 

となりました。現在のタイプのインテリセンスを見たいからです。これを行う必要がある場合は、あなたのタイプが大きすぎておそらくSingle Responsibility Principleに従っていないと提出します。そして、あなたがそうであると言うことができます。なぜこれを保つか。あなたが実際に電話をかけた後でそれをリファクタリングしてください。

3

私は混乱を避けるために、いつもインスタンス変数と名前が同じ(まれに)のメソッドパラメータを持っています。

+0

ローカルのvar /メソッドのパラメータがインスタンスvarをシャドウにするので、このような場合には、そうする必要があると思います。しかし、あなたと同意し、混乱を避けるために役立ちます。 –

2

ませんが、その後、私はVBの多くを書く;)

だけの時間について、私はこれをチェックします/私は、私はメンバーの名前を正確に覚えていないか、私は区別する必要がある場合ときですそれは同じ名前の関数パラメータを持ちます。

2

私はそれが有益かもしれないことを確かに見ることができますが、私が取り組んでいることは十分に複雑であり、別のレベルの説明が必要です。

28

私は、渡されたパラメータが関連するメンバ変数と同じ名前を持つ場合、主にコンストラクタまたはセッタで接頭辞this.を使用します。

+5

合意。あいまいさを取り除くために追加するだけです。 –

+3

さらに合意した。私はセッターの名前が一致しないことは嫌いです。それは本当に意味をなさない。 –

+0

+1 インスタンス化するすべてのオブジェクトに名前空間を付加するのは同じ意味になります。 – Nippysaurus

21

C#では、絶対に行っています。主な理由は以下のとおりです。それを行うべきか否か

  1. が 文体の問題です。にもかかわらずすべてのことにもかかわらず、私は 続ける戦い、私は 客観的にあると信じて 良いアプローチ。

  2. マイソース解析ツール(StyleCop)インスタンスの フロントアクセスにthis.を必要とする デフォルト。私 最初のポイントは、私は、私はいつも を行うか、常にない、と デフォルトStyleCop設定は にあるので、常にそれを必要とするかどうかについてではない ケアあまり、私はパスを取る必要があることを意味し 以上の抵抗値/最大 一貫性と私はデフォルトの 設定に従います。

私はこの哲学をほとんどの文章の問題に従います。私は、の巨大なファンではなく、の自動フォーマットIDEでデフォルトの書式設定オプションを変更しています。実際にはそれほど重要ではないことに対して、誰もが人生をより困難にするだけです。

+2

Resharperのデフォルトの書式設定は、すべての 'this'を削除します。私は 'これを使用することを控える。私がなくてはできない場合を除いて。 – Carra

+1

私はこの答えに同意しません。 StyleCopのデフォルトであるからといって、それが正しいというわけではありません。私はそのルールを作成した人は、おそらく3日で2時間未満の睡眠に取り組んでいたと思う。 –

+2

@robertそれは彼が意味するスタイルだと言って、私は同意する、この場合は普遍的に正しい行動は実際にはないということだ。デフォルト設定を使用すると、他の誰かの机で作業したり、他人のコードを見たりすると、もっと簡単になります... –

2

私たちはReSharperを使用しています。これは、そのすべてをうまく管理しています。ほとんどの場合、同じ名前のコンストラクタパラメータを通常使用するため、コンストラクタに保持しない限り、 'this'を削除します。

5

私はこの練習がほとんどの場合読みやすさを向上させると思うので、そうです。

8

クラッタが加わります。そうではありません。

+1

私は同意する、それは無駄です。 –

+0

全く同意しない。これを追加する場合。広告が混乱していると、おそらくあなたのコードはすでに完全に構​​造化されていないでしょう。 – KdgDev

0

があります。私は、Visual StudioのIntellisenseが最近のように巧妙ではなかったとき、習慣に戻った。

私は気が散っているとは思えません。私は多くのPythonを書いていて、どこにでも自分自身を見るのに慣れていたからです。

0

セッターやコンストラクタのように、パラメータと区別する必要がある場合のみ。私は、不要なケースでのその使用を「コードジャンク」と考えています。これはEdward Tufteのchartjunkに類似しています。信号の代わりにノイズ。

0

インスタンス変数名がメソッド引数と同じであれば、もはや単に「明らかにする理由」ではありません。前置詞を付けないと、不具合が発生する可能性があります。

私はこれがベンSが意味するものだと思っていますが、それ以上のベストプラクティスの問題ではないことを強調したいと思います。

私はしばしば明瞭さを向上させます。 私は脳がすぐにそれを読んでいるが、インスタンス変数であることを登録するので、それが混乱に加わるとは思わない。

7

絶対に。 'this'は、m_のような接頭辞の必要性を避けます。さらに重要なのは、コードのパフォーマンスがすぐに向上する理由です。

私は実際にMicrosoft Cops(FxCop、StyleCop)を採用しました。彼らは本当に私が普通に思っていないものをキャッチするのを助けてくれました。たとえば、メソッドがメンバー変数を参照しない場合、FxCopからの1つの提案は、メソッドを静的としてマークすることです。したがって、メソッドをクラスのすべてのインスタンスに割り当てる必要はありません。 MSDNから:staticとして をマークすることができインスタンスに データにアクセスしたり、インスタンスメソッドを呼び出すことはありません

メソッド(Visual BasicではShared )。メソッドを という名前で静的に設定すると、コンパイラは の非仮想呼び出しサイトを メンバーに送信します。非仮想呼び出し サイトを送信すると、 現在のオブジェクトポインタがヌルでないことを保証する実行時に、各呼び出しごとにチェックが行われなくなります(実行時には )。 性能重視のコードでは、測定可能な数値が になる可能性があります。一部の ケースでは、現在のオブジェクトインスタンス にアクセスできないと、 の正しさの問題が発生します。

メンバー変数に 'this'をプレフィックスします。私には2つのことがあります。まず、StyleCopを満たします。第二に、さらに重要なのは、メソッドを静的とマークする必要があるかどうかを素早く識別するのに役立ちます。

もちろん、FxCopを実行すると、メソッドを静的としてマークする必要があるかどうかがわかります。ただし、 'this'を使用してください。新しいコードを書くのに多くの時間を費やし、FxCop違反を救済する時間を短縮するのに役立ちます。

+0

これは、まれなパフォーマンス重視のコードにのみ適用されます。一般に、関数が静的であるかどうかは契約の問題です。現在の実装では、クラスメンバーにアクセスする必要がないため、関数を静的にするべきではありません。将来、他のコードが静的に依存している必要があるかもしれません。 –

1

私は、コードに明快さを追加しています。それは現在の手順またはクラスですか?

1

はい、これが表示されます。私はそれが地元であると確信しており、私はそれ以上見る必要はありません。これに接頭辞が付いていない場合。 (または多分「_」)私はそれがローカルまたは祖先で宣言されているかどうかを確認するために持っているか、それがパラメータまたは...

だ場合は、すべてのこれらのチェックは、デバッグ時にもう少し時間がかかる...

0

オートコンプリートがポップアップするので、私はたくさんのことをする。

1

一般的にはそうです。コミュニケーションスコープは、可読性の重要な側面です。ローカル変数、静的メソッドなどと区別します。また、定義が「近くに」あることも伝えます。

ああ、私はパブリックメソッド/プロパティに対してのみ行います。それらは大文字で書かれているので、これは正しいです。内部ビューは、外部ビュー(myInstance.Thing)のようになります。プライベートプロパティはしばしば小文字であるため、それはあまり魅力的ではありません。

もちろん、厳密には必要ではなく、一部の人々はそれをより簡潔にすることを好みます。しかし、それは私と、コードを見るかもしれない他の開発者にヒントを提供します。

関連する問題