日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#運算符重載概念及應(yīng)用詳解

什么是C#運算符重載?

10年積累的網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有烏當(dāng)免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

所謂運算符重載,就是對已有的運算符重新進(jìn)行定義,賦予其另一種功能,以適應(yīng)不同的數(shù)據(jù)類型。

自定義類的賦值運算符重載函數(shù)的作用與內(nèi)置賦值運算符的作用類似,但是要要注意的是,它與拷貝構(gòu)造函數(shù)與析構(gòu)函數(shù)一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定默認(rèn)的賦值運算符重載函數(shù),那么系統(tǒng)將會自動提供一個賦值運算符重載函數(shù)。

下面是Vector的定義—— 包含成員字段、構(gòu)造函數(shù)和一個ToString()重寫方法,以便查看Vector的內(nèi)容,***是C#運算符重載:

 
 
 
  1. namespace Wrox.ProCSharp.OOCSharp  
  2. {  
  3. struct Vector  
  4. {  
  5. public double x, y, z;  
  6. public Vector(double x, double y, double z)  
  7. {  
  8. this.x = x;  
  9. this.y = y;  
  10. this.z = z;  
  11. }  
  12. public Vector(Vector rhs)  
  13. {  
  14. x = rhs.x;  
  15. y = rhs.y;  
  16. z = rhs.z;  
  17. }  
  18. public override string ToString()  
  19. {  
  20. return "( " + x + " , " + y + " , " + z + " )";   

這里提供了兩個構(gòu)造函數(shù),通過傳遞每個元素的值,或者提供另一個復(fù)制其值的Vector,來指定矢量的初始值。第二個構(gòu)造函數(shù)帶一個Vector參數(shù),通常稱為復(fù)制構(gòu)造函數(shù),因為它們允許通過復(fù)制另一個實例來初始化一個類或結(jié)構(gòu)實例。注意,為了簡單起見,把字段設(shè)置為public。也可以把它們設(shè)置為private,編寫相應(yīng)的屬性來訪問它們,這樣做不會改變這個程序的功能,只是代碼會復(fù)雜一些。

下面是Vector結(jié)構(gòu)的有趣部分—— 為+運算符提供支持的C#運算符重載:

 
 
 
  1. public static Vector operator + (Vector lhs, Vector rhs)  
  2. {  
  3. Vector result = new Vector(lhs);  
  4. result.x += rhs.x;  
  5. result.y += rhs.y;  
  6. result.z += rhs.z;  
  7. return result;  
  8. }  
  9. }  

C#運算符重載的聲明方式與方法的聲明方式相同,但operator關(guān)鍵字告訴編譯器,它實際上是一個運算符重載,后面是相關(guān)運算符的符號,在本例中就是+。返回類型是在使用這個運算符時獲得的類型。在本例中,把兩個矢量加起來會得到另一個矢量,所以返回類型就是Vector。對于這個+運算符重載,返回類型與包含類一樣,但這種情況并不是必需的。兩個參數(shù)就是要操作的對象。對于二元運算符(帶兩個參數(shù)),如+和-運算符,***個參數(shù)是放在運算符左邊的值,第二個參數(shù)是放在運算符右邊的值。

C#要求所有的C#運算符重載都聲明為public和static,這表示它們與它們的類或結(jié)構(gòu)相關(guān)聯(lián),而不是與實例相關(guān)聯(lián),所以運算符重載的代碼體不能訪問非靜態(tài)類成員,也不能訪問this標(biāo)識符;這是可以的,因為參數(shù)提供了運算符執(zhí)行任務(wù)所需要知道的所有數(shù)據(jù)。

前面介紹了聲明運算符+的語法,下面看看運算符內(nèi)部的情況:

 
 
 
  1. {  
  2. Vector result = new Vector(lhs);  
  3. result.x += rhs.x;  
  4. result.y += rhs.y;  
  5. result.z += rhs.z;  
  6. return result;  

這部分代碼與聲明方法的代碼是完全相同的,顯然,它返回一個矢量,其中包含前面定義的lhs和rhs的和,即把x、y和z分別相加。

下面需要編寫一些簡單的代碼,測試Vector結(jié)構(gòu):

 
 
 
  1. static void Main()  
  2. {  
  3. Vector vect1, vect2, vect3;  
  4. vect1 = new Vector(3.0, 3.0, 1.0);  
  5. vect2 = new Vector(2.0,­­­–4.0,–4.0);  
  6. vect3 = vect1 + vect2;  
  7. Console.WriteLine("vect1 = " + vect1.ToString());  
  8. Console.WriteLine("vect2 = " + vect2.ToString());  
  9. Console.WriteLine("vect3 = " + vect3.ToString());  

把這些代碼保存為Vectors.cs,編譯并運行它,結(jié)果如下:

 
 
 
  1. Vectors  
  2. vect1 = ( 3 , 3 , 1 )  
  3. vect2 = ( 2 ,–4 ,–4 )  
  4. vect3 = ( 5 ,–1 ,–3 ) 

C#運算符重載不能用于Java。

C#運算符重載的相關(guān)內(nèi)容就向你介紹到這里,希望對你了解C#運算符重載有所幫助。


文章名稱:C#運算符重載概念及應(yīng)用詳解
標(biāo)題URL:http://m.5511xx.com/article/djehcij.html