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

C#操作符重載學習的一點總結(jié)

開發(fā) 后端
C#操作符重載是如何實現(xiàn)的呢?C#操作符重載是如何執(zhí)行的呢?那么本文就向你介紹這方面的內(nèi)容。

C#操作符重載問題的提出

在面向?qū)ο蟮某绦蛟O計中,自己定義一個類,就等于創(chuàng)建了一個新類型。類的實例和變量一樣,可以作為參數(shù)傳遞,也可以作為返回類型。

C#操作符重載問題比如對于兩個整型變量,使用算術(shù)操作符可以簡便地進行算術(shù)運算:

  1. class A  
  2. {  
  3.  public int x;  
  4.  public int y;  
  5.  public int Plus{  
  6.     return x+y;  
  7.   }  

C#操作符重載問題再比如,我們希望將屬于不同類的兩個實例的數(shù)據(jù)內(nèi)容相加:

  1. class B  
  2. {  
  3.   public int x;  
  4. }  
  5. class Test  
  6. {  
  7.  public int z;  
  8.  public static void Main{  
  9.     A a=new A();  
  10.     B b=new B();  
  11.     z=a.x+b.x;  
  12.  }  

使用a.x+b.x這種寫法不夠簡潔,也不夠直觀。更為嚴重的問題是,如果類的成員中聲明時使用的不是publixc修飾符的話,這種訪問就是非法的。

我們知道,在C#中,所有數(shù)據(jù)要么屬于某個類,要么屬于某個類的實例,充分體現(xiàn)了面向?qū)ο蟮乃枷?。因此,為了表達上的方便,人們希望可以重新給已定義的操作符賦予新的含義,在特定的類的實例上進行新的解釋。這就需要通過操作符重載來解決。

使用成員方法重載操作符

C#操作符重載總是在類中進行聲明,并且通過調(diào)用類的成員方法來實現(xiàn)。

操作符重載聲明的格式為:

  1. type operator operator-name(formal-param-list) 

C#操作符重載可以實現(xiàn)的有:

  1. + - ! ~ ++ -- true false 
  2.  
  3. * / % & | ^ << >> == != > < >= <= 

但也有一些操作符是不允許進行重載的,如:

  1. =,&&,||,?:,new,typeof,sizeof,is 

C#操作符重載之一元操作符重載

顧名思義,一元操作符重載時操作符只作用于一個對象,此時參數(shù)表為空,當前對象作為操作符的單操作數(shù)。

下面我們舉一個角色游戲中經(jīng)常遇到的例子。扮演的角色具有內(nèi)力、體力、經(jīng)驗值、剩余體力、剩余內(nèi)力五個屬性,每當經(jīng)驗值達到一定程序時,角色便會升級,體力、內(nèi)力上升,剩余體力和內(nèi)力補滿?!吧墶蔽覀兪褂弥剌d操作符“++”來實現(xiàn)。

C#操作符重載程序:

  1. using System;  
  2. class Player  
  3. {  
  4.  public int neili;  
  5.  public int tili;  
  6.  public int jingyan;  
  7.  public int neili_r;  
  8.  public int tili_r;  
  9.  public Player()  
  10.  {  
  11.    neili=10;  
  12.    tili=50;  
  13.    jingyan=0;  
  14.    neli_r=50;  
  15.    tili_r=50;  
  16.  }  
  17.  public static Player operator ++(Player p){  
  18.    p.neili=p.neili+50;  
  19.    p.tili=p.tili+100;  
  20.    p.neili_r=p.neili;  
  21.    p.tili_r=p.tili;  
  22.    return p;  
  23.  }  
  24.  public void Show()  
  25.  {  
  26.   Console.WriteLine("Tili:{0}",tili);  
  27.   Console.WriteLine("Neili:{0}",neili);  
  28.   Console.WriteLine("Tili_full:{0}",tili_r);  
  29.   Console.WriteLine("Neili_full:{0}",neili_r);  
  30.  }  
  31. }  
  32. class Test  
  33. {  
  34.  public static void Main(){  
  35.     Player man=new Player();  
  36.     man.Show();  
  37.     man++;  
  38.     Console.WriteLine("Now upgrading...:");  
  39.     man.Show();  
  40.  }  

C#操作符重載之二元操作符重載

大多數(shù)情況下我們使用二元操作符重載。這時參數(shù)表中有一個參數(shù),當前對象作為該操作符的左操作數(shù),參數(shù)作為操作符的右操作數(shù)。

下面我們給出二元操作符重載的一個簡單例子,即笛卡兒坐標相加。

C#操作符重載程序:

  1. using System;  
  2. class DKR  
  3. {  
  4.   public int x,y,z;  
  5.   public DKR(int vx,int vy,int vz){  
  6.      x=vx;  
  7.      y=vy;  
  8.      z=vz;  
  9.   }  
  10.   public static DKR operator +(DKR d1,DKR d2)  
  11.   {  
  12.   DKR dkr=new DKR(0,0,0);  
  13.   dkr.x=d1.x+d2.x;  
  14.   dkr.y=d1.y+d2.y;  
  15.   dkr.z=d1.z+d2.z;  
  16.   return dkr;  
  17.   }  
  18. }  //C#操作符重載
  19. class Test  
  20. {  
  21.   publixc statixc void Main(){  
  22.     DKR d1=new DKR(3,2,1);  
  23.     DKR d2=new DKR(0,6,5);  
  24.     DKR d3=d1+d2;  
  25.     Console.WriteLine("The 3d 
  26. location of d3 is:{0},{1},{2}",d3.x,d3.y,d3,z);  
  27.   }  
  28.  

試著編譯、運行該程序,看結(jié)果是否與預期一致。

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

【編輯推薦】

  1. C# 操作XML之建立Xml對象淺析
  2. C# 操作XML之讀取Xml淺析
  3. C# 操作XML的全過程實例淺析
  4. C#操作xml文件實例詳解
  5. C#操作XML文件學習綜合體會
責任編輯:仲衡 來源: bianceng.cn
相關(guān)推薦

2009-08-18 17:34:25

C#操作符重載應用

2009-08-18 18:06:54

C#操作符重載

2009-08-19 16:59:25

C# 操作符

2009-08-18 17:55:20

C#操作符重載

2009-08-18 17:42:12

C#操作符重載

2009-08-14 10:16:57

C#運算符重載

2009-08-19 17:13:15

C# 操作符基礎知識

2009-08-28 16:30:24

C#線程

2009-08-19 11:23:12

C#操作Word

2009-08-19 17:26:28

C# 操作符

2009-07-14 18:34:22

Jython操作符重載

2009-08-18 13:06:17

C#枚舉類型

2009-08-12 11:20:51

C#運算符重載

2009-08-19 17:20:22

C# 操作符

2010-02-05 10:30:02

C++操作符重載

2009-08-12 12:46:11

C#運算符重載

2009-09-09 10:53:25

C# MessageB

2009-08-13 17:52:13

C#構(gòu)造函數(shù)

2009-08-27 17:50:09

interface接口

2010-02-03 10:23:47

C++操作符重載
點贊
收藏

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