同じクラスのコンストラクターでしか設定できないクラスのプロパティを作ろうとしています。
プロパティに読み取り専用のバッキングフィールドを設定します。
public class Thing
{
private readonly string _value;
public Thing(string value)
{
_value = value;
}
public string Value { get { return _value; } }
}
Microsoftのこのページ コンストラクターからのみプロパティを設定する方法について説明します。
不変のプロパティは2つの方法で作成できます。セットaccessor.toをプライベートとして宣言できます。プロパティは型内でのみ設定可能ですが、コンシューマーには不変です。代わりに、getアクセサーのみを宣言できます。これにより、型のコンストラクターを除くすべての場所でプロパティが不変になります。
Visual Studio 2015に含まれているC#6.0では、コンストラクターからプロパティのみを取得するように設定できるように変更されています。そしてコンストラクターからのみ。
したがって、コードを単純化して、getonlyプロパティだけにすることができます。
public class Thing
{
public Thing(string value)
{
Value = value;
}
public string Value { get; }
}
C#6.0以降、コンストラクターで設定できるプロパティのみを取得できるようになりました(プロパティ自体にセットが定義されていない場合でも。 プライベートセッターを持つプロパティとget-only-property を参照してください。
正しい方法は次のとおりです。
public string MyProperty{ get; private set; }
public MyClassConstructor(string myProperty)
{
MyProperty= myProperty;
}