1

クラスオブジェクトから値を取得しようとすると、このエラーが発生します。 get-onlyプロパティにreadonlyキーワードを実装した後に表示されます。これまでに理解したことは、 "readonly"を実装することはクラスプロパティをgetメソッドに制限するだけであるということです。キーワードの実装方法がわからない場合は、どうぞ。

これが現在のコードです。

 class Counter
{
    private int _count;
    private string _name;

    public Counter(string name)
    {
        _name = name;
        _count = 0;
    }
    public void Increment()
    {
        _count++;
    }
    public void Reset()
    {
        _count = 0;
    }
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
        }
    }
    public readonly int Value
    {
        get
        {
            return _count;
        }
    }
}


  • readonlyここでは必要も許可もされていません。ゲッターのみを提供しているという事実は、そのプロパティが読み取り専用であることを示すのに十分です。 - Jeroen Mostert
  • ゲッターのみを持つプロパティは既に読み取り専用です。のreadonly修飾子はフィールドにのみ適用されます。 - CodeCaster

1 답변


5

プロパティを読み取り専用にするには、以下で十分です。

public int Value { get { return _count; }}

readonlykeywordは、コンストラクタ内でのみ設定可能な読み取り専用フィールドにすることです。

class Age
{
    readonly int year;
    Age(int year)
    {
        this.year = year;
    }
    void ChangeYear()
    {
        //year = 1967; // Compile error if uncommented.
    }
}

ところで、近道としてあなたが書くことができます:

public int Value { get; private set;}

これで、パブリックゲッターとプライベートセッターを持つプロパティが手に入りました。そのため、このクラスのインスタンス内でのみ設定できます(そして邪悪な反射を通して)。


  • 「悪反射を通して」これはまた、readonly-フィールド。 - HimBromBeere
  • @HimBromBeere:良い点です。これらのアクセス修飾子は、アプリケーションを構築しながら開発者をガイドするためだけのものです。セキュリティや保護を提供するものではありません。 - Stefan

リンクされた質問


関連する質問

最近の質問