3

ExProperty私は以下のようなクラスを持っています:

class ExProperty
{
    private int m_asimplevar;
    private readonly int _s=2;

    public ExProperty(int iTemp)
    {
        m_asimplevar = iTemp;  
    }

    public void Asimplemethod()
    {
        System.Console.WriteLine(m_asimplevar);
    }

    public int Property
    {
        get {return m_asimplevar ;}
        //since there is no set, this property is just made readonly.
    }
}

class Program
{
    static void Main(string[] args)
    {
        var ap = new ExProperty(2);
        Console.WriteLine(ap.Property);
    }
}
  1. プロパティを読み取り専用または書き込み専用にする/使用する唯一の目的は何ですか?なるほど、readonly同じ目的を達成する次のプログラムを通して!

  2. プロパティを読み取り専用にする場合、書き込み可能であってはならないと思います。使うとき

    public void Asimplemethod()
    {
        _s=3; //Compiler reports as "Read only field cannot be used as assignment"
        System.Console.WriteLine(m_asimplevar);
    }
    

    はい、これは大丈夫です。

    しかし、私が使用する場合

    public ExProperty(int iTemp)
    {
        _s = 3 ; //compiler reports no error. May be read-only does not apply to constructors functions ?
    }
    

    この場合、コンパイラがエラーを報告しないのはなぜですか?

  3. 宣言は_s=3大丈夫ですか?_sまたは、コンストラクターを使用してその値を宣言して割り当てる必要がありますか?

4

2 に答える 2

5

はい、readonlyキーワードは、フィールド初期化子とコンストラクターでのみフィールドに書き込むことができることを意味します。

readonly必要に応じて、プロパティ アプローチと組み合わせることができます。プロパティのprivateバッキング フィールドはreadonly、プロパティ自体に getter しかないときに宣言できます。次に、バッキング フィールドをコンストラクター (および可能なフィールド初期化子) でのみ割り当てることができます。

他に考えられるのは、フィールドの作成です。フィールド自体は読み取り専用であるため、getter がフィールド値を返すだけの場合、実際には getter から多くのことを達成することはできません。public readonly

于 2012-09-18T06:24:26.317 に答える
3

プロパティのポイントは、クラス外へのインターフェースを提供することです。定義しないSetかプライベートにすることで、クラスの外部に対して「読み取り専用」になりますが、クラス メソッドの内部から変更することはできます。

field を作成することreadonlyで、この変更がどこから来ても、それは決して変更されるべきではないと言っています。

于 2012-09-18T06:27:56.607 に答える