6

例を挙げましょう:

public class MyClass
{
    public string MyProperty { get; set; }

    public MyClass(string myProperty)
    {
        MyProperty = myProperty; // bad?
        this.MyProperty = myProperty; // good?
    }
}

私はthisこのシナリオで使用することにしました。なぜなら、ケースだけに頼ると混乱したり、さらに悪いことに実際にバグにつながる可能性があるという小さな妄想があるからです。

ここでの「ベストプラクティス」とは何ですか?

編集:

これまでのところ、これは私が思っていたよりもはるかに主観的であるように思えます。私は人々がどちらかの側で強く降りてくるだろうと思った。

4

7 に答える 7

12

this.」の使用は、どのクラスでも冗長です。それを使用するための基準を設定するのは、完全に開発ショップ次第です。

""を使用することの長所はthis.、コードを読んでいるときに、頭の中でそれをクラスインスタンスに関連付ける方が簡単だと感じる開発者もいることです。また、おっしゃるように、同じような名前のアイテムを扱うときにわかりやすくします。

短所は、コードファイルが乱雑であると見なす人がいることです。また、ReSharperなどのツールを使用すると、デフォルトで冗長コードとしてマークされます。

于 2009-09-30T17:07:13.973 に答える
5

wompが言ったように。「これ」は冗長ですが、コードが読みやすくなります。または、誤読しにくいです。

于 2009-09-30T17:09:09.663 に答える
2

C#は間違いなく大文字と小文字を区別するため、使用するリスクはありません...

MyProperty = myProperty;

それで、私はあなたの目標を達成するために必要な最小限のコードを書くような他のベストプラクティスに目を向けます(自己文書化しながら)。真実は、それは必須ではありません、ミニマリストはそれを省くと言うかもしれません。

于 2009-09-30T17:50:18.170 に答える
2

これが私があなたの例を使って現在どのようにプロパティを初期化するかです(自動実装されたものとされていないものの両方)

        public class MyClass
    {
        public string MyProperty { get; set; }

        public string AnotherProperty
        {
            get { return _anotherProperty; }
            set { _anotherProperty = value; }
        }
        private string _anotherProperty;

        public MyClass(string myProperty, string anotherProperty)
        {
            MyProperty = myProperty; // auto-implemented property initialization
            _anotherProperty = anotherProperty; //property with member variable initialization                
        }
    }

'this'を使用することに点在することは、私には仕様を超えています。それは資本化されているので、私はそれが地元の財産であることを知っています。すべてのプロパティは大文字にする必要があります。アンダースコアがあるため、変数'_anotherProperty'にクラススコープがあることはわかっています。以前は、クラスレベルの変数からアンダースコアを省略していました。VSのツールチップで宣言を表示するために変数にマウスを合わせる必要がなく、スコープがすぐにわかるため、アンダースコアがあるとコードが読みやすくなります。また、アンダースコアを省略するだけで、ローカル変数に同じ名前を使用できるという利点があります。これにより、初期化がきれいに見えます。アンダースコアのもう1つの利点は、アンダースコアを入力してCtrl + Spaceキーを押すと、クラススコープの変数がすべてグループ化されることです。

于 2009-09-30T21:26:01.173 に答える
1

私の職場では、コーディング標準では、プロパティはLikeThisで記述され、ローカル変数はlikeThisで記述されるように規定されています。C#では大文字と小文字が区別されるため、これは変数を区別するために利用するのに適したツールです。ただし、まったく同じ名前のプロパティとローカル変数を使用している場合は、thisキーワードを使用すると、使用法が明確になります。

于 2009-09-30T17:56:12.563 に答える
0

どちらのオプションもケースのみに依存しています...どちらにも違いはありません。

于 2009-09-30T17:08:27.380 に答える
0

私の意見では、ここでの「ベストプラクティス」は「そうしないでください」です。レビューしているコードでそれを見つけた場合は、すぐにフラグを立てます。ケースによってのみ異なる2つの変数があることは、起こるのを待っているだけの誤解です。myThingメンテナンスプログラマーが数か月または数年後にやって来て、の代わりにうっかりして割り当てを行うのは簡単すぎMyThingます。

後で追加:

コメント提供者は、大文字/小文字の命名規則を置き換えるための私の提案を求めました。そのためには具体的な例が必要です。Bookプロパティが1つしかない 単純なクラスがあるとしますTitle::

public class Book
{
    public string Title { get; private set; }
}

ここで、コンストラクターが必要です。一般的な規則は、プロパティの小文字バージョンを使用することです。

public Book(string title)
{
    Title = title;
}

または、あいまいさがないことを確認したい場合:this.Title = title

これはコンストラクターでは問題ないという議論をすることができます。そして、すべてのコンストラクターが非常に単純だったとしたら、そうかもしれません。Titleしかし、私の経験では、コンストラクターがほんの数行を超えると、との区別titleが失われます。コンストラクター以外のメソッドについて話していると、問題はさらに悪化します。いずれにせよ、別の規則が必要です。

何を使う?ttlたとえば、パラメータで使用されている略語をさまざまに使用して見ました 。または、のようなものbookTitleで、Intellisenseを使用するとよりわかりやすくなります。私の意見では、大文字と小文字だけが異なる名前を使用するという慣習よりもどちらかが望ましいと思います。

于 2009-09-30T17:26:24.163 に答える