2017-05-09 59 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。