次のようなプロパティを定義すると
public string Name {get; set;}
ドットネットは、プロパティコードを作成できます。しかし、私たちが使用するとき
public string Name {get;}
public string Name {set;}
私たちは直面する
'Hajloo.SomeThing.PropertyName.set' must declare a body because it is not marked abstract or extern. Automatically implemented properties must define both get and set accessors.
コンパイラがプロパティを決定できず、コードを自動的に作成できないのはなぜですか?どうしたの?
自動実装プロパティは、プロパティ値の独自のバッキングストアを生成するためです。内部ストアにアクセスできません。
でプロパティを実装する
通常のプロパティ
private int _data;
public int Data{ get { return _data } };
ここで、親クラスはクラスの他の場所で次のことを実行できます(自動小道具ではできません)
_data = 100;
注:このようなauto-propを定義できます(これが私が最もよく使用する方法です)。
public int Data { get; private set;}
つまり、クラスの外部クライアントはプロパティを設定できません。ただし、包含クラス自体は、クラス定義内のthis.Data = x;
を介してプロパティを複数回設定できます。
セッターがない場合、プロパティはデフォルト値以外にはなり得ないため、何の目的も果たしません。
このエラーを受信するためのより現代的なシナリオは、VS 2015より前のバージョンのVisualStudio(または14より前のMsBuildを使用)を使用してC#6構文を使用するコードをビルドすることです。
C#6.0では、セッターを持たないautoPropertiesを使用できます(これらはプライベートセットと見なされます)。
VS2015 +またはmsbuild 14+でコンパイルするか、コードを変更してすべてのautoPropertiesにセッターを設定します。