加法操作符可以用運用於整數類型、實數類型、枚舉類型、字符串類型和代表類型。這是通過操作符重載實現的,我們將在第十一章講述操作符重載的內容,這裡我們只需要知道這些操作符可以對不同類型的變量進行運算就可以了。加法操作符實際上定義了以下原型用於整數和浮點數運算:
int operator +(int x,int y);
uint operator +(uint x,uint y);
long operater +(long x,long y);
ulong operator +(ulong x,ulong y);
float operator +(float x,float y);
double operator +(double x,double y);
decimal operator +(decimal x,decimal y);
我們知道,在數學運算中結果可能是正無窮大、負無窮大,也可能結果不存在。在C#中,這種情況的處理按照了國際上IEEE 754算法的規則。表7-2給出了在兩個數相加時,操作數與目標類型的非零有限值、零值、無限值和NaN值(空值)的所有可能的組合。表中x和y是非零的有限值,z是“x+y”的運算結果。如果x和y數值相同,但符號相反,則z為零。如果“x+y”太小,目標類型也無法表示,則z為和“x+y”同符號的零值。
表7-2
y +0 -0 +∞ -∞ NaN x z x x +∞ -∞ NaN +0 y +0 +0 +∞ -∞ NaN -0 y +0 -0 +∞ -∞ NaN +∞ +∞ +∞ +∞ +∞ NaN NaN -∞ -∞ -∞ -∞ NaN -∞ NaN NaN NaN NaN NaN NaN NaN NaN枚舉型加法
對於枚舉類型的變量,加法操作符的原型是:
E operator +(E x,U y);
E operator +(U x,E y);
此處E是枚舉類型,U是E的基類型。該運算等價於(E)((U)x+(U)y)
程序7-2演示了枚舉類型的加法運算。
程序清單7-2:
using System; enum Weekday{ Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday }; class Test { public static void Main(){ Weekday day1=Weekday.Sunday; Weekday day2=Weekday.Saturday; Weekday day3=day1+6; Console.WriteLine(day1); Console.WriteLine(day2); Console.WriteLine(day3); } }
程序輸出結果為:
0
6
6
字符串加法
對於object與string類型也可以進行加法運算,並且返回值總是string類型,這時加法操作符的原型是:
string operator +(string x,string y);
string operator +(string x,string y);
string operator +(object x,string y);
比如,字符串“Welcome”和“to you”相加的結果就是“Welcome to you”。
代表合並
加法操作符還可以作用於delegate類型的變量,這是我們稱之為合並。原型為
D operator +(D x,D y);
其中D是一個delegate類型。
式子中如果兩個操作數是同一delegate類型D時,則加法操作符執行代表合並運算。如果第一個操作數為null,那麼結果是第二個操作數的值。反之,如果第二個操作數為null,則結果是第一個操作數的值。