賦值就是給一個變量賦一個新值。C#中提供的賦值表達式有:
= += -= *= /= %= &= /= ^= <<= >>=
賦值的左操作數必須是一個變量,屬性訪問器或索引訪問器的表達式。
C#中可以對變量進行連續賦值,這時賦值操作符是右關聯的,這意味著從右向左操作符被分組。例如,形如a=b=c的表達式等價於a=(b=c)。
如果賦值操作符兩邊的操作數類型不一致,那就先要進行類型轉換。
7.3.1 簡單賦值
“=”操作符被稱為簡單賦值操作符。在一個簡單賦值中,右操作數必須為某種類型的表達式,且該類型必須可以隱式地轉換成左操作數類型。該運算符將右操作數的值賦給作為左操作數的變量、屬性或者索引器類型。簡單賦值表達式的結果是被賦給左操作數的值。結果類型和左操作數的類型相同,且總是值類型。
7.3.2 復合賦值
形如x op=y的運算可以處理成形如x op y的二進制操作符重載方法。比如:
x+=5; //等於x=x+5
x%=3; //等於x=x%3
x*=y+1; //等於x=x*(y+1)
復合賦值進行的步驟如下:
(1)如果所選操作符的返回類型可以隱式轉換成x的數據類型,執行x=x op y的運算,除此之外,僅對x執行一次運算。
(2)否則,所選操作符是一個預定義操作符,所選操作符的返回值類型可以顯式地轉換成x的類型,且y可以隱式地轉換成x的類型,那麼該運算等價於x=(T)(x op y)運算,這裡T是x的類型,除此之外,x僅被執行一次。
(3)否則,復合賦值是無效的,且會產生編譯時錯誤。