0

以下のコードでは、StackOverflow エラーが発生します (予想どおり)。ただし、 set メソッド内でこの変数の値を設定できるようにしたいと考えています。これを行う方法はありますか?

public bool IsAvailable 
{
    get
    {
        return IsAvailable;
    }

    set
    {
        if (value == true)
        {
            this.Shape.BrushColor = ColorAvailable;
            IsAvailable = true;
        }
        else
        {
            this.Shape.BrushColor = ColorNotAvailable;
            IsAvailable = false;
        }
    }
}
4

6 に答える 6

8

バッキング フィールドを使用する必要があります。

private bool _isAvailable;

public bool IsAvailable 
{
    get
    {
        return _isAvailable;
    }

    set
    {
        if (value == true)
        {
            this.Shape.BrushColor = ColorAvailable;
            _isAvailable = true;
        }
        else
        {
            this.Shape.BrushColor = ColorNotAvailable;
            _isAvailable = false;
        }
    }
}

ところで:コードはかなり短縮できます:

private bool _isAvailable;

public bool IsAvailable 
{
    get
    {
        return _isAvailable;
    }

    set
    {
        this.Shape.BrushColor = value ? ColorAvailable : ColorNotAvailable;
        _isAvailable = value;
    }
}
于 2013-05-13T12:30:04.710 に答える
1

バッキング フィールドを使用できます。

private bool _IsAvailable;
public bool IsAvailable 
{
    get
    {
        return _IsAvailable;
    }

    set
    {
        this.Shape.BrushColor = value ? ColorAvailable : ColorNotAvailable;
        _IsAvailable = value;
    }
}

自動プロパティと明示的プロパティ

于 2013-05-13T12:31:19.380 に答える
1

プライベート メンバーを作成して、private bool _isAvailableそこにフラグを保存できます。

public bool IsAvailable 
{
get
{
    return _isAvailable;
}

set
{
    if (value)
    {
        this.Shape.BrushColor = ColorAvailable;
    }
    else
    {
        this.Shape.BrushColor = ColorNotAvailable;
    }
    _isAvailable = value;
}

}

于 2013-05-13T12:31:20.833 に答える
0

基本的に IsAvailable は、@Cemre が正しく言うように、次のような基礎となる (バッキング) フィールドではないプロパティです。

private bool _isAvailable;

また、たとえば、'(value == true)' が 'if (value)' と同じである場合の冗長性を減らし、if...else の外で基になるフィールドの値を設定することも検討します。 1行。このようにして、上記は次のように縮小できます。

set
{
    this.Shape.BrushColor = value?ColorAvailable:ColorNotAvailable;
    _isAvailable = false;
}
于 2013-05-13T12:39:48.440 に答える