1

重複の可能性:
C# 3.0 Auto-Properties - 役に立つかどうか

上司と私は、自動プロパティを使用することの利点と欠点について定期的に議論しています。

public string Name { get; set; }

private string name;

public string Name
{
    get { return this.name; }
    set { this.name = value; }
}

為に

すべてのフィールドがそのようにコーディングされていると、クラスを理解しやすくなり、長期的には多くの時間を節約できるため、それらを使用することを強く支持します(ほとんどの場合、毎回ビットレスコード)。

に対して

フィールドはオブジェクトの状態を反映する必要があり、プロパティを持つフィールドの代わりにプロパティを使用してアクセスすると、デバッグ中にその情報が失われるため、プログラミングの原則に違反していると彼は主張します。(上司、これを読んで、あなたの言いたいことと違う場合は、お気軽にコメントしてください ;))

みんなはこの件についてどう思う?

注:私は重複を見てきましたが、この質問のポイントである反対の点については話していません。「私は彼らを愛している」/「私は気にしない」と言っているだけです。

4

3 に答える 3

1

どうやってその情報をあきらめますか?このプロパティは、フィールドではなくオブジェクトの状態を反映します。これは大きな違いですか?

フィールドでサポートしたいのは、設定時に追加のロジックを実行する必要がある場合 (つまり、検証)、または値やシングルトンなどのキャッシュなどのデザイン パターンを強制する場合のみです。

于 2010-09-12T02:00:27.620 に答える
0

おそらく、Auto で実装されたプロパティの私の理解には欠陥がありますが、ドキュメントを作成する場合は、プロパティによってサポートされています。自動実装プロパティは、ボイラープレート コードのみを記述するためのショートカットです。コンパイラは、コンパイル時に Auto プロパティを展開しますよね? IL を見ると、バッキング フィールドが表示されます。バッキングフィールドは、アンダースコアが前に付いたプロパティ名だと思います。

そのため、フィールドはオブジェクトの状態を反映し、多くのコードを記述する必要はありません。このフィールドは IDE で非表示になっているだけですが、必要に応じてリフレクションを使用してアクセスすることもできます。

于 2010-09-12T02:10:49.247 に答える
-1

彼の議論は間違っています (だから、あなたはそれを間違って引用したのかもしれません)。

とにかく、それは問題ではありません。節約できる時間を誇張しています。また、ほとんどの実際のアプリケーションでは、自動プロパティから開始し、最終的にはさまざまな目的で実際のフィールドに対応するように変更します。本当に無駄な議論です。

于 2010-09-12T01:59:53.843 に答える