2017-05-09 20 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”?

我读Foo1的方式是:

集货号至25(它设置NUM〜10),然后设置NUM到NUM(它返回NUM,它是10)

我读foo2的为:

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

为什么他们有什么不同?

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

回答

0

在你的setter,你是否

num = value > 20 

所以,当你写:

num = Num = 25; 

由二传手NUM首先将被设置为20,因为它是0,然后再没有setter方法当你写这个

Num = num = 25; 

首先NUM被设置为25
将被设置为25而没有setter,然后setter将被设置为10,因为它已经是25。