この質問にはすでに答えがあります。
クラスオブジェクトから値を取得しようとすると、このエラーが発生します。 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;
}
}
}
プロパティを読み取り専用にするには、以下で十分です。
public int Value { get { return _count; }}
のreadonly
keywordは、コンストラクタ内でのみ設定可能な読み取り専用フィールドにすることです。
例:
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
readonly
ここでは必要も許可もされていません。ゲッターのみを提供しているという事実は、そのプロパティが読み取り専用であることを示すのに十分です。 - Jeroen Mostertreadonly
修飾子はフィールドにのみ適用されます。 - CodeCaster