次の方法でプロパティを定義することに違いはありますか?
// 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;}
私の知る限り、それは文体の好みのように見えるだけです。私は何かが足りないのですか?
違い:
2番目のバージョンは、自動的に実装されたプロパティ(または略して「自動プロパティ」)として知られているものです。これらはC#3で導入されました。最初のバージョンのように見えるコードのみを記述している場合(つまり、ロジックが含まれていない場合)、自動プロパティは優れています。ロジックを最初の形式に変換することで、後でいつでもロジックを追加できます。すべてのコードは、ソースとバイナリの両方の互換性の観点から、その変更と互換性があります。
自動プロパティしないではデフォルト値を指定でき、真に読み取り専用の自動プロパティ(つまり、ゲッターのないプロパティ)などは存在しないことに注意してください。あなたが来ることができる最も近いものは、プライベートセッターを備えたパブリックゲッターです。
public string Name { get; private set; }
まったく同じではありませんが、多くの状況で十分に近いです。
1つ目は標準プロパティです。値を格納するフィールドを定義する必要があります。2番目は 自動実装プロパティ で、C#3.0以降でのみ使用できます。
最終的には、この場合も同じように機能します。違いは、取得/設定にルールを適用する場合に発生します。その場合、プライベート/保護された変数を使用して、パブリックプロパティの背後に隠す必要があります。
いいえ。実際、短いバージョンを使用する場合(public string Name { get; set; }
)コンパイラは、プロパティのプライベートフィールドを自動的に生成します。
答えはILにあります。 ildasmを使用して比較します。
http://msdn.Microsoft.com/en-us/library/f7dy01k1%28v=VS.90%29.aspx