自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#操作符重載的那點(diǎn)事兒

開發(fā) 后端
C#操作符重載是什么呢?C#操作符重載具體的體現(xiàn)又是什么呢?C#操作符重載應(yīng)用的實(shí)例如何呢?那么本文向你詳細(xì)講解。

C#操作符重載是什么?

是指允許用戶使用用戶定義的類型編寫表達(dá)式的能力。

例如,通常需要編寫類似于以下內(nèi)容的代碼,以將兩個(gè)數(shù)字相加。很明顯,sum 是兩個(gè)數(shù)字之和。

int i = 5;
int sum = i + j;

如果可以使用代表復(fù)數(shù)的用戶定義的類型來(lái)編寫相同類型的表達(dá)式,那當(dāng)然是***不過(guò)了:

Complex i = 5;
Complex sum = i + j;

運(yùn)算符重載允許為用戶定義的類型重載(即指定明確的含義)諸如“+”這樣的運(yùn)算符。如果不進(jìn)行重載,則用戶需要編寫以下代碼:

Complex i = new Complex(5);
Complex sum = Complex.Add(i, j);

此代碼可以很好地運(yùn)行,但 Complex 類型并不能象語(yǔ)言中的預(yù)定義類型那樣發(fā)揮作用。

在我看來(lái)是操作符重載是讓struct、class、Interface等能夠進(jìn)行運(yùn)算。

如時(shí)實(shí)現(xiàn)C#操作符重載。

先寫關(guān)鍵詞public和static,后跟返回類型,后跟operator關(guān)鍵詞,后跟要聲明的操作符符號(hào),***在對(duì)一對(duì)圓括號(hào)中添加恰當(dāng)?shù)膮?shù)。

如下例中的struct Hour中的public static Hour operator+ (Hour lhs,Hour rhs){...}

C#操作符重載方法:

1、編寫操作符重載方法。

2、實(shí)例化后,進(jìn)行操作符運(yùn)算

下邊用C#操作符重載代碼進(jìn)行說(shuō)明:

  1. class Program  
  2. {  
  3. static void Main(string[] args)  
  4. {  
  5. Hour hrValue1 = new Hour(10);  
  6. Hour hrValue2 = new Hour(20);  
  7.  
  8. //2、得到兩個(gè)Hour相加結(jié)果  
  9. Hour hrSum = hrValue1 + hrValue2;  
  10.  
  11. //得到Hour+Int的結(jié)果  
  12. Hour hrSumInt = hrValue1 + 10;  
  13.  
  14. //得到Int+Hour的結(jié)果  
  15. Hour hrIntSum = 11 + hrValue2;  
  16. Console.WriteLine("hrValue1 +  hrValue2 = {0}", hrSum.iValue);  
  17. Console.WriteLine("hrValue1 +  10  = {0}", hrSumInt.iValue);  
  18. Console.WriteLine("11 +  hrValue2  = {0}", hrIntSum.iValue);  
  19. Console.ReadKey();  
  20. }  
  21. struct Hour  
  22. {  
  23. private int value;  
  24. //此構(gòu)造函數(shù)根據(jù)int值創(chuàng)建Hour類 ,C#操作符重載 
  25. public Hour(int iValue)  
  26. {  
  27. this.value = iValue;  
  28. }  
  29. //定義一個(gè)屬性,便于取用value值  
  30. public int iValue  
  31. {  
  32. get 
  33. {  
  34. return value;  
  35. }  
  36. } //C#操作符重載
  37. //1、聲明一個(gè)二元操作符,將兩個(gè)Hour類加到一起   
  38. public static Hour operator+ (Hour lhs,Hour rhs)  
  39. {  
  40. return new Hour(lhs.value + rhs.value);  
  41. }  
  42.  
  43. /*  
  44. 操作符是public的。所有操作符都必須是public的  
  45.  
  46. 操作符是static的。所有操作符都必須是static的,操作永遠(yuǎn)不具有多態(tài)性,  
  47.  
  48. 面且不能使用virtual、abstract、override或者sealed修飾符。  
  49.  
  50. 二元操作符(比如+)有兩個(gè)顯式參數(shù);一元操作符有一個(gè)顯式的參數(shù)  
  51.  
  52. 我們有了public Hour(int iValue)構(gòu)造函數(shù),就可以將一個(gè)int與Hour相加,只是首先要將int轉(zhuǎn)換成為Hour  
  53.  
  54. hour a= ;  
  55.  
  56. int b= ;  
  57.  
  58. Hour sum=a+new Hour(b);  
  59.  
  60. 雖然上述代碼完全有效,但相較于讓一個(gè)Hour和一個(gè)int直接相加它即不清晰也不準(zhǔn)確。  
  61.  
  62. 為了使Hour可以+ int,必須聲明一個(gè)二元操作符+,它的***個(gè)參數(shù)是Hour,第二個(gè)參數(shù)是一個(gè)int。  
  63.  C#操作符重載
  64.  */ 
  65. public static Hour operator+ (Hour lhs,int rhs)  
  66. {  
  67. return lhs + new Hour(rhs);  
  68. }  
  69. //使一個(gè)int 可以+hour。  
  70. public static Hour operator +(int lhs, Hour rhs)  
  71. {  
  72. return new Hour(lhs)+rhs;  
  73. }  
  74. }  

C#操作符重載示例2:

  1. struct Hour  
  2. {  
  3. public int iValue;  
  4. //構(gòu)造函數(shù)  
  5. public Hour(int initialValue)  
  6. {  
  7. this.iValue = initialValue;  
  8. }  
  9. //1、定義操作符重載(一元操作符)  
  10. public static Hour operator ++ (Hour huValue)  
  11. {  
  12. huValue.iValue++;  
  13. return huValue;  
  14. }  //C#操作符重載
  15.  
  16. //==操作符是二元操作符,必須帶有兩個(gè)參數(shù)  
  17. public static bool operator==(Hour lhs,Hour rhs)  
  18. {  
  19. return lhs.iValue == rhs.iValue;  
  20. }  
  21. public static bool operator!=(Hour lhs,Hour rhs)  
  22. {  
  23. return lhs.iValue != rhs.iValue;  
  24. }  
  25. }  
  26.  
  27. //++操作符有前綴和后綴的形式,C#能智能地為前綴后后綴使用同一個(gè)操作符。  
  28.  
  29. static void Main(string[] args)  
  30. {  
  31. //2、實(shí)例化類  ,C#操作符重載
  32.  
  33. Hour hu = new Hour(10);  
  34. //3、  
  35. //操作符重載  
  36.  
  37. hu++;  
  38. //輸出重載后的結(jié)果  
  39.  
  40. Console.WriteLine("Hu++ = {0}", hu.iValue);  
  41. //C#操作符重載  
  42.  
  43. ++hu;  
  44. //輸出重載后的結(jié)果  
  45.  
  46. Console.WriteLine("Hu++ = {0}", hu.iValue);  
  47.  
  48. Console.ReadKey();  
  49. }  

C#操作符重載的基本內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#操作符重載有所幫助。

【編輯推薦】

  1. C# 操作XML的全過(guò)程實(shí)例淺析
  2. C#操作xml文件實(shí)例詳解
  3. C#操作XML文件學(xué)習(xí)綜合體會(huì)
  4. C#操作符重載學(xué)習(xí)的一點(diǎn)總結(jié)
  5. C#操作符重載應(yīng)用的一點(diǎn)體會(huì)
責(zé)任編輯:仲衡 來(lái)源: 博客園
相關(guān)推薦

2009-08-18 18:06:54

C#操作符重載

2009-08-18 17:42:12

C#操作符重載

2009-08-18 17:20:17

C#操作符重載

2009-08-18 17:34:25

C#操作符重載應(yīng)用

2011-05-23 14:10:00

2009-07-14 18:34:22

Jython操作符重載

2009-08-19 17:26:28

C# 操作符

2009-08-19 17:20:22

C# 操作符

2009-08-12 12:46:11

C#運(yùn)算符重載

2010-02-05 10:30:02

C++操作符重載

2010-02-03 10:23:47

C++操作符重載

2009-08-21 09:30:05

is和as操作符

2009-08-19 17:38:17

C# 操作符分類

2009-08-19 17:13:15

C# 操作符基礎(chǔ)知識(shí)

2009-08-19 16:59:25

C# 操作符

2009-08-21 09:57:08

C#操作符IS與AS

2024-05-13 00:00:00

C#操作符代碼

2009-08-19 17:33:35

C# 操作符

2010-01-28 11:16:28

C++操作符

2010-01-27 11:00:17

C++操作符
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)