7

Resharper は、次のコードを自動プロパティに変更することを提案しています。なぜこれがより良いのか、誰でも説明できますか?

private List<Configuration> _configurations;
public List<Configuration> Configurations
{
    get { return _configurations; }
    set { _configurations = value; }
}

に:

public List<Configuration> Configurations { get; set; }

プリミティブ型に対してこれを実行しても問題ないのに、オブジェクト型に対してこの方法を提案するのはなぜですか?

4

5 に答える 5

16

両方の同等のコードを検討してください。

private List<Configuration> _configurations;
public List<Configuration> Configurations
{
    get { return _configurations; }
    set { _configurations = value; }
}

public List<Configuration> Configurations { get; set; }

読者にとって、C# の知識があると仮定すると、2 番目の部分のコードは非常に簡単に読むことができます。最初のものは時間がかかり、情報を追加しません。実際には、役に立たない情報が追加されます。プロパティConfigurationsがありますが、同等のフィールドもあります_configurations。クラスの残りのコードはそれらのいずれかを使用する可能性があるため、両方を考慮に入れる必要があります。たとえば、クラスにこのような 15 個のプロパティがあるとします。自動プロパティを使用すると、コードを読む人の複雑さが大幅に軽減されます。

さらに、一貫して自動プロパティを使用すると、非自動プロパティを記述するたびに、そこで何かが起こっていることがすぐに警告されます。自動プロパティを使用しない場合、この有用な情報は隠されます。

要約すると、自動プロパティの一貫した使用:

  • コード長を短縮
  • クラスを読んで理解するのに必要な時間を短縮します
  • 無駄な情報を隠す
  • 役立つ情報を見つけやすくする

好きではないことは何ですか?

于 2012-12-21T10:17:36.953 に答える
2

両方のコードの動作は同じです。自動プロパティは、ロジックのないプロパティを読みやすくするための単なる構文糖衣です。

詳細については、MSDN のドキュメントを参照してください。

C# 3.0 以降では、プロパティ アクセサーに追加のロジックが必要ない場合、自動実装されたプロパティによってプロパティ宣言がより簡潔になります。

于 2012-12-21T10:09:49.680 に答える
1

自動プロパティと同じように、コードはバッキング変数を取得して設定するだけなので、re-sharperはここで自動プロパティの方が優れていると判断したと思います。

re-sharperが、ゲッターとセッターがバッキング変数に割り当てて読み取るだけではないことを検出した場合、それは問題ではないと思います。

さまざまな理由から、私はリシャーパーのファンではありません。私はStyleCopとCodeAnalysis(FXCop)を使用することを好みますが、コードをより読みやすく、保守しやすくするのに役立つという利点があります。本当にここでやろうとしているのはそれだけです。

于 2012-12-21T10:14:37.700 に答える
0

古い表記法を使用する唯一の (一時的な?) 利点は、setandgetメソッドがヒットしたときに中断できることです。

于 2012-12-21T10:48:19.957 に答える
0

プロパティで巧妙なことを何もしていない場合は、単にコードを削減し、コードの読みやすさを向上させます-舞台裏で同じコードを生成します.

これをしたくないのは、次のようなことをしたい場合だけです:

private readonly List<Configuration> _configurations = new List<Configuration>();
public List<Configuration> Configurations
{
    get { return _configurations; }        
}

プロパティがnullになることはないため、おそらくこれをお勧めします。

于 2012-12-21T10:10:06.780 に答える