3

この質問にはすでに答えがあります。

なぜC#のプロパティを読み取り専用にできないのですか?

プロパティを読み取り専用にしようとすると、次のようになります。

修飾子 'readonly'はこの商品には無効です

同様の質問がここで尋ねられました:プロパティを読み取り専用にできないのはなぜですか。しかし、質問は5年前に尋ねられ、そのときに提供された答えは次のとおりでした。これは5年経ってもまだ当てはまりますか?

編集: コード例:

public class GreetingClass
{
    public readonly string HelloText { get; set; }
}


  • あなたのコードを投稿してもらえますか - sujith karivelil
  • 技術的には5年経っても何も変わらず、あなたが言及した質問に対するすべての回答はまだ最新のものです。 - Andy Korneyev
  • まあ、財産の便利な名前ですget/setどのアクセサ方法。 - Dmitry Bychenko
  • 私の答えを見てください。 C#6.0とそれ以前のバージョンを比較します。 C#6.0では状況が少し変わりました。 - Nikhil Vartak

5 답변


14

プロパティはC#で読み取り専用にすることができ、実装はreadonlyキーワードを使用していません。

C#6(VS 2015)を使用している場合は、次の行を使用して、コンストラクターまたはメンバー定義のいずれかでプロパティを割り当てることができます。

public int Property { get; }

古いC#/ Visual Studioバージョンを使用している場合は、次のように記述して、コンストラクターまたはフィールド定義にフィールドを割り当てることができます。

private readonly int property;
public int Property { get { return this.property; }}


3

プロパティを読み取り専用にしておきたい場合は、単に次のようにそれらのgetterを定義します。

public MyProperty { get; }


  • これは、すべてのC#バージョンで機能しますか、それともC#6 +でのみ機能しますか? - Stralos
  • それは2.0より後のすべてのために働くでしょう - Ovais Khatri

2

アウトセットのあるプロパティは、読み取り専用のプロパティと見なされます。C#読み取り専用のキーワードで指定する必要はありません。

public class GreetingClass
{
    private string _HelloText = "some text"; 
    public string HelloText => _HelloText; 
}

どこにVBあなたが指定する必要があります:Public ReadOnly Property HelloText() As String


  • プライベート変数を通して値を返すことができます。 anserの更新を見ます - sujith karivelil

1

グーグルをしたことがある場合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バッキングフィールドは自動的に生成され、プロパティの初期化に選択した値に設定されます。


0

多かれ少なかれ、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"; }
}

リンクされた質問


関連する質問

最近の質問