この質問にはすでに答えがあります。
なぜC#のプロパティを読み取り専用にできないのですか?
プロパティを読み取り専用にしようとすると、次のようになります。
修飾子 'readonly'はこの商品には無効です
同様の質問がここで尋ねられました:プロパティを読み取り専用にできないのはなぜですか。しかし、質問は5年前に尋ねられ、そのときに提供された答えは次のとおりでした。これは5年経ってもまだ当てはまりますか?
編集: コード例:
public class GreetingClass
{
public readonly string HelloText { get; set; }
}
プロパティはC#で読み取り専用にすることができ、実装はreadonlyキーワードを使用していません。
C#6(VS 2015)を使用している場合は、次の行を使用して、コンストラクターまたはメンバー定義のいずれかでプロパティを割り当てることができます。
public int Property { get; }
古いC#/ Visual Studioバージョンを使用している場合は、次のように記述して、コンストラクターまたはフィールド定義にフィールドを割り当てることができます。
private readonly int property;
public int Property { get { return this.property; }}
プロパティを読み取り専用にしておきたい場合は、単に次のようにそれらのgetterを定義します。
public MyProperty { get; }
アウトセットのあるプロパティは、読み取り専用のプロパティと見なされます。C#
読み取り専用のキーワードで指定する必要はありません。
public class GreetingClass
{
private string _HelloText = "some text";
public string HelloText => _HelloText;
}
どこにVB
あなたが指定する必要があります:Public ReadOnly Property HelloText() As String
グーグルをしたことがある場合C#の読み取り専用プロパティ、あなたは持っていただろう100 * no_of_answers_here正しい結果
https://msdn.microsoft.com/en-us/library/w86s7x04.aspxはっきりと述べているset
アクセサは読み取り専用です。だからそれを適用することを考えるのは論理的ですreadonly
さらにキーワードは冗長性を引き起こします。
さらにC#6.0までは、設定できませんでしたreadonly
包含型(たとえば、class
) C#6.0では、少なくとも初期化の一部として行うことができます。これがC#6.0で可能になることを意味します、public int Prop { get; } = 10;
そうすると、readonly
バッキングフィールドは自動的に生成され、プロパティの初期化に選択した値に設定されます。
多かれ少なかれ、C#6からこれは次のようなものを使って可能です。
class MyClass {
string MyProp { get; }
MyClass { MyProp = "Hallo Worls"; }
}
C#6より前では、代わりに読み取り専用のバッキングフィールドを使うことができます。
class MyClass {
private readonly string _myProp;
string MyProp { get { return this._myProp; } }
MyClass { this._myProp = "Hallo Worls"; }
}
get
/set
どのアクセサ方法。 - Dmitry Bychenko