16

重複の可能性:
ゲッターとセッターを使用する理由
C# 3.0 自動プロパティ - 役に立つかどうか?

次の方法でプロパティを定義することに違いはありますか -

// 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;}

私が知る限り、それは文体的な好みのようにしか見えません. 何か不足していますか?

4

5 に答える 5

26

違い:

  • 2 番目の形式は、C# 3 以降のコンパイラでのみコンパイルされます。
  • 2 番目の形式では、実際のフィールドには「言葉にできない名前」があるため、(同じクラス内であっても) どのコードもフィールドに直接アクセスできません。

2 番目のバージョンは、自動実装プロパティ(略して「自動プロパティ」) と呼ばれるものです。それらは C# 3 で導入されました。最初のバージョンのように見えるコードのみを記述している場合 (つまり、ロジックが含まれていない場合)、自動プロパティは優れています。最初のフォームに変換することで、後でいつでもロジックを追加できます。すべてのコードは、ソースとバイナリの両方の互換性に関して、その変更と互換性があります。

C# 6 より前のバージョンでは、自動プロパティでデフォルト値を指定できないことに注意してください。また、真に読み取り専用の自動プロパティ (つまり、getter のないもの) はありません。あなたが来ることができる最も近いものは、プライベートセッターを備えたパブリックゲッターです。

public string Name { get; private set; }

まったく同じではありませんが、多くの状況で十分に近いものです。

于 2011-02-07T16:23:47.977 に答える
2

1 つ目は、標準プロパティです。値を格納するフィールドを定義する必要があります。2 つ目は自動実装されたプロパティで、C# 3.0 以降でのみ使用できます。

于 2011-02-07T16:24:37.867 に答える
0

答えは IL にあります。ildasm を使用して比較します。

http://msdn.microsoft.com/en-us/library/f7dy01k1%28v=VS.90%29.aspx

于 2011-02-07T16:23:45.230 に答える
0

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

于 2011-02-07T16:24:21.670 に答える
0

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

于 2011-02-07T16:25:04.703 に答える