2011-02-07 13 views
15

重複の可能性:
Why use getters and setters?
C# 3.0 Auto-Properties - useful or not?C#のゲッター、セッター宣言

次のようにプロパティを定義することの違いがあります - 限り

// private, with getter & setter 
private string fName; 
public string Name 
{ 
    get { return this.fName } 
    set { this.fName = value } 
} 

// define as a Property 
public string Name { get; set;} 

私は言うことができる、それはただloo文体的な好みのようなks。何か不足していますか?

+0

効果的ではありません - この質問は以前何度も聞かれました。 – ChrisF

+0

@ChrisFそれは間違いなくぞーだけど、私はあなたが持っているものは大丈夫だとは思わない。 –

+0

@ダニエル - これは私が見つけた最初のもので、複数の可能な重複を許しているので本当に問題ではない。 – ChrisF

答えて

26

違い:

  • 第二形態のみ第二形態は、任意のコード(でも同じクラスの)アクセスをさせないC#3コンパイラでコンパイル以降
  • う実際のフィールドとして直接フィールドは、「言いようのない名前」

番目のバージョンは、自動的に私として知られているものであるましたmplementedプロパティ(または「自動プロパティ」)。それらはC#3で導入されました。最初のバージョンのように見えるコードを書いているだけの場合、つまり論理が関係していないコードを書く場合、自動プロパティは素晴らしいです。論理を後で最初の形式に変換することによって、いつでも追加することができます。ソースコードとバイナリ互換性の両方の点で、すべてのコードはその変更と互換性があります。

自動プロパティではないので、デフォルト値を指定できます。また、本当に読み込み専用の自動プロパティ(ゲッターなしのプロパティ)はありません。あなたに最も近いのは、プライベートセッターを持つパブリックゲッターです。

public string Name { get; private set; } 

これはまったく同じではありませんが、多くの状況で十分です。

+3

またはこれより短い場合は「auto-property」) –

0

最終的には、この例では同じことになります。違いは、取得/設定にルールを適用する場合です。その場合は、private/protected変数を使用して、パブリックプロパティの背後に隠す必要があります。

2

最初は標準プロパティです。値を格納するフィールドを定義する必要があります。2番目のフィールドはauto-implemented propertyで、C#3.0以降でのみ使用できます。

0

いいえ、実際には、短いバージョン(public string Name { get; set; })を使用すると、コンパイラはプロパティのプライベートフィールドを自動的に生成します。

関連する問題