链接字段和属性时的执行顺序

时间:2017-05-09 15:00:06

标签: c# properties get set order-of-execution

我完全不知道该怎么称呼它,所以随时更改标题(如果可以)或建议新标题。 我有以下代码(注意它在生产中没有多大意义,它仅用于演示目的)。

    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”?

我阅读Foo1的方式是:

将Num设置为25(将num设置为10),然后将num设置为Num(返回num,即10)

我把Foo2读作:

将num设置为25(之前是30),现在将Num设置为num(将num设置为10)

为什么他们不同?

在字段上使用它,即“a = b = 5;”和“b = a = 5;”将结果设置为5,那么为什么在应用于属性时会有所不同?我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:0)

在你的二传手中检查是否

 num = value > 20

所以当你这样写:

num = Num = 25;

首先由setter num设置为20,因为它是0,然后再次没有setter将被设置为25.
当你写这个

Num = num = 25;

第一个数字将设置为25而不设置setter,然后setter将设置为10,因为它已经是25。