0

C# 自動実装プロパティを使用すると、次のことを行うクラスを作成できます (エラーが発生するため、疑似 C# コード - これをコンパイルしようとすると以下になります):

public class Foo {
    public String HouseName { get; private set; }
    public int HouseId { get; private set; }
    public int BedsTotal { 
        get { return (BedsTotal < 0) ? 0 : BedsTotal; }
        private set;
    }
}

エラー 5 'House.BedsTotal.set' は、abstract、extern、または partial c:\src\House.cs とマークされていないため、ボディを宣言する必要があります

私には、ゲッターのボディを取得し、{ get; プライベートセット; しかし、それは機能していません。

わざわざメンバー変数を設定し、プライベートセッターを外して、代わりにメンバー変数を使用する必要がありますか?

ありがとう!

4

2 に答える 2

3

get {}はい、プライベート変数を設定する必要があります。なぜなら、それ自体を参照しているため、その部分を読み取ろうとしてループに陥るからです。

次のようにプライベート バッキング変数を設定します。

private int _bedsTotal;
public int BedsTotal { 
        get { return (_bedsTotal < 0) ? 0 : _bedsTotal; }
        private set { _bedsTotal = value; }
    }

その後、専用セッターを介してベッドにアクセスできます

于 2013-09-25T07:00:00.727 に答える
2

もっと簡単なアプローチをとるべきだ

private int _bedsTotal;
public int BedsTotal
{ 
    get
    {
        return (this._bedsTotal < 0) ? 0 : this._bedsTotal;
    }
    private set
    {
        this._bedsTotal = value;
    }
}

したがって、次のように値を設定できますBedsTotal:this.BedsTotal = [integer];を使用できるため、他のプライベートメソッドを使用する必要はありませんset

于 2013-09-25T07:07:51.983 に答える