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

我阅读 Foo1 的方式是:

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

我将 Foo2 读为:

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

为什么它们不同?

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

4

1 回答 1

0

在您的设置器中,您检查是否

 num = value > 20

所以当你写这个时:

num = Num = 25;

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

Num = num = 25;

第一个 num 将在没有 setter 的情况下设置为 25,然后通过 setter 将设置为 10,因为它已经是 25。

于 2017-05-09T15:05:04.530 回答