2017-05-09 11 views
0

これは何を呼び出すべきか全く分かりませんので、タイトルを変更したり、新しいものを提案したりしてください。 私は以下のコードを持っています(実演ではあまり意味がないことに注意してください)。フィールドとプロパティを連鎖させるときの実行順序

static float num = 30f; 
    static float Num 
    { 
     get { return num; } 
     set { num = value > 20 ? 10f : value; } 
    } 

    void Foo() 
    { 
     num = Num = 25; 
     print(num + " " + Num); 
    } 

    void Foo2() 
    { 
     Num = num = 25; 
     print(num + " " + Num); 
    } 

なぜFoo()は「25 25」を印刷し、Foo2(10)は「10 10」を印刷するのですか?

IはFOO1を読み出す方法である:(10 NUMを設定する)25に

セット民Iとしてfoo2はを読み取る

(10 NUMを返す)民に、次に設定NUM: 25へ

セットnumが、今NUMにテンキーを設定し(それは前に30だった)

(10 NUMを設定します)彼らはなぜ異なっていますか?

「a = b = 5;」というフィールドにこれを使用します。 「b = a = 5;どちらも5に設定されます。なぜ、これをプロパティに適用すると違うのですか?私は明白な何かを欠いていますかあなたのセッターで

答えて

0

あなたがチェック

num = value > 20 

もしそうなら、あなたはこれを書くとき:

それはセッターせずに再び0である、とのように20に設定されますセッターNUMによってまず
num = Num = 25; 

ますあなたはこの

Num = num = 25; 

まずNUMを書くとき25
に設定しますセッターなしで25に設定され、セッターでは既に25に設定されているため、10に設定されます。

関連する問題