3

私が想像する簡単な質問ですが、これらのコード行の違いは何ですか:

コード 1

public int Temp { get; set; } 

コード 2

private int temp;
public int Temp { get { return temp; } }

私の理解では、コード 1 の自動プロパティはコード 2 とまったく同じ機能を実行しますか?

私は Head First C# を読んでいますが、同じことを行うのに 2 つの異なる方法を使用している理由を理解するのが難しいと思いますか?

4

5 に答える 5

7

Code1 と Code2 の主な違いは、#1 ではプロパティが設定可能であることです。

セッターはプライベートにできるため、自動プロパティを使用して同じことを実現できます。

public int Temp { get; private set; }

自動プロパティは C#3 で追加されましたが、実際には、フィールドを使用する長いバージョンの構文糖衣にすぎません。フィールドに直接アクセスする必要がない場合、自動プロパティを使用しない理由はありません。自動プロパティは、フィールドを使用するのと同じです。コンパイラがフィールドを生成します。コードでアクセスすることはできません。

于 2011-01-04T13:48:12.060 に答える
2

「automagic」プロパティは単なる「略記」表記です。

public int Temp { get; set; } 

よりも入力がはるかに簡単です

public int Temp 
{   
   get { return _temp; }
   set { _temp = value; } 
}

しかし、機能的には同等です。生産性を向上させるための単なる「速記」ですが、実際には追加機能や魔法の機能はありません。

于 2011-01-04T13:49:10.387 に答える
2

最初のものは書き込み可能なプロパティです。

と同等です

private int temp;
public int Temp { 
    get { return temp; } 
    set { temp = value; }
}

(ただし、backingfield を直接使用できないことを除いて)、5 行ではなく 1 行のコードが必要です。
5 つまたは 6 つの単純なプロパティを持つクラスを作成する場合、自動プロパティを使用するとクラスを大幅に短縮できます。

書き込むことで、読み取り専用の自動プロパティを作成できます

public int Temp { get; private set; }
于 2011-01-04T13:47:35.740 に答える
1

2 番目の例にゲッターとセッターの両方がある場合、それらは機能的に同等です。

現状では、最初のものはパブリックに取得できますが、パブリックに設定することはできません。自動プロパティを使用して同じことを達成することもできます。

public int Temp { get; private set; }

興味がある方のために説明すると、自動プロパティは依然としてバッキング プライベート フィールドを取得します。そのビットはコンパイラによって処理されるだけなので、作業が楽になります。

于 2011-01-04T13:50:32.360 に答える
0

バッキング フィールドでプロパティを使用する理由は、プロパティを取得または設定するときに何か他のことをしたい場合です。たとえば、プロパティ自体に埋め込まれた検証ルーチン、またはキャッシュなど...

それ以外の場合は、単純な取得と設定のために、自動プロパティ形式を使用します。よりコンパクトで、コーディングが少なくて済むのは良いことだと思います。

于 2011-01-04T13:58:33.113 に答える