0

プロパティ値が変更されたかどうかを検出できるが、オブジェクトが初期化されたときは検出できない方法はありますか?

public string Foo
{
    set
    {
        // Register property has changed
        // but not on initialization
    }
}
4

2 に答える 2

2

バッキングフィールドがある場合は、初期化時にフィールドを設定し、その後にプロパティを設定できます。

private string foo;

public Bar()
{
    foo = "default"; // initialize without calling setter
}

public string Foo
{
    set
    {
        foo = value;
        // setter registers that property has changed
    }
}
于 2012-08-19T07:33:37.193 に答える
2

あなたはこのようにそれを行うことができます:

public class Bar
{
    private bool _initializing;

    private string _foo;
    public string Foo
    {
        set
        {
            _foo = value;
            if(!_initializing)
                NotifyOnPropertyChange();
        }
    }

    public Bar()
    {
        _initializing = true;
        Foo = "bar";
        _initializing = false;
    }
}

または、セッターを使用する代わりに、_initializing部分をスキップして_fooを直接設定します。

于 2012-08-19T07:36:31.263 に答える