2009-04-27 14 views
2

パブリックプロパティを使用してプライベート変数にアクセスする代わりに、パブリックプロパティのみを使用する利点は何ですか?例えばパブリックプロパティとプライベートメンバーC#

public int iMyInt { get; set; } 

代わりの

.NETは、プロパティの下に変数/メモリを管理させる以外に
private int myint; 
public int iMyInt { get { return myint; } set { myint = value; } } 

、(そのことについてまたは欠点)利点は何ですか?

答えて

11

自動プロパティを使用すると(最初の例)入力が少なくなります。

パブリックプロパティのみを使用し、パブリックフィールドは使用しないことを強くお勧めします。多くのプロパティは、プライベートフィールドの周りの単純なラッパーです。自動プロパティを使用すると、プロパティとバッキングフィールドを手動で作成する時間と手間が省けます。

あなたが言及した単純なケースの自動プロパティと手動プロパティの背後にある実際のコードはほぼ同じである必要があります。

+2

また、データバインディングを利用したい場合は、公共のプロパティを使用すると有利です – RobS

1

プロパティが取得または設定されたときに何か起こることを望むまで、何らかの違いはありません。

たとえば、OnMyIntSetイベントが必要な場合は、自動プロパティ構文を使用できませんでした。

4

ILにコンパイルされると、2つはほぼ同じになります。

私の経験則は、個人的に、自動プロパティを使用することです。彼らはより簡潔であり、より少ないタイピングを必要とします、そして、私がそれらを使用するとき、彼らは単に論理のない単純なラッパーであることを意味します。

ロジックを追加する必要がある場合は、自分のバッキングフィールドに切り替えるのは簡単ですし、(外部の)結果はありません。

8

私は、コードの可読性が向上していることをより少なく入力することよりも重要であることを示唆しています。私は通常、デフォルトのオプションとして自動プロパティを使用することをアドバイスし、特定の要件がある場合は明示的なプロパティに切り替えるようにします。

+2

+1、優秀な点。バッキングフィールドを持つプロパティは、クラスの「重要」部分から気を散らす多くのボイラープレートコードを簡単に生成します。 – Michael

1

私の個人的な好みは、特に必要な場合を除き、自動特性です。

自動プロパティを使用する利点は、もちろん簡潔です。余裕が少なく、読みやすく、入力が簡単です。

不利な点は、プライベートバッキング変数へのアクセス権がなくなり、時にはが必要になることです。

So:プライベートバッキング変数を使用する必要がある場合は、「古い」メソッドを使用します。そうしないと、自動プロパティを使用します。パブリックフィールドを使用しないでください。それはちょうどクレイジートークです。

0

簡単に言えば、自動的に実装されるプロパティでは、getアクセサとsetアクセサの両方を定義する必要があります。

関連する問題