C#學習筆記(九):c#運算子多載.[簡單理解]

來源:互聯網
上載者:User

首先看看運算子多載的基本文法。

要重載運算子,可以給類添加運算子類型成員(它們必須是static)。

我們先看一個簡單的類:

     public class AddClass1

     {

         public int val;

     }

這僅是int值的一個封裝器(wrapper),但可以用於說明規則。

對於這個類下面的代碼不能編譯:

              AddClass1 op1 = new AddClass1();

              op1.val = 5;

              AddClass1 op2 = new AddClass1();

              op2.val = 5;

              AddClass1 op3 = op1 + op2;

其錯誤是+運算子不能應用於AddClass1類型的運算元,因為我們還沒有定義要執行的操作。

雖然下面的代碼可以執行,但是得不到我們希望的結果:

              AddClass1 op1 = new AddClass1();

              op1.val = 5;

              AddClass1 op2 = new AddClass1();

              op2.val = 5;

              bool op3 = op1 == op2;

這僅是使用二元運算子==判斷op1和op2是否引用的用一個對象,而不是驗證他們的值是否相等。在這段代碼中,即使op1.val和op2.val相等,op3也是false。因為它們引用的並不是同一個對象。

 

我們使用下面的方法來實現對+運算子的重載。

     public class AddClass1

     {

         public int val;

 

         public static AddClass1 operator +(AddClass1 op1, AddClass1 op2)

         {

              AddClass1 returnVal = new AddClass1();

              returnVal.val = op1.val + op2.val;

              return returnVal;

         }

     }

重載所有的二元運算子基本上都和這個相似。一元運算子看起來也是類似的,但是只有一個參數。

         public static AddClass1 operator -(AddClass1 op1)

         {

              AddClass1 returnVal = new AddClass1();

              returnVal.val = - op1.val;

              return returnVal;

         }

 

下面我們再看一個不同類的對象運算的例子。

     public class AddClass1

     {

         public int val;

 

         public static AddClass3 operator +(AddClass1 op1, AddClass2 op2)

         {

              AddClass3 returnVal = new AddClass3();

              returnVal.val = op1.val + op2.val;

              return returnVal;

         }

     }

 

     public class AddClass2

     {

         public int val;

     }

 

     public class AddClass3

     {

         public int val;

     }

對於這種類型的定義下面的代碼也是可以執行的:

              AddClass1 op1 = new AddClass1();

              op1.val = 5;

              AddClass2 op2 = new AddClass2();

              op2.val = 5;

              AddClass3 op3 = op1 + op2;

這是因為在AddClass1中定義的加運算子僅適合於AddClass1與AddClass2相加然後賦值給AddClass3對象。而且順序必須是AddClass1對象在前,AddClass2對象在後的這種相加,如果要顛倒順序,除非我們按照顛倒的順序在進行一個運算子的重載,否則是不支援這種演算法的。

 

下述運算子可以重載:

一元運算子:+, -, !,  ~, ++, --, true, false

二元運算子:+, -, *, /, %, &, |, ^, <<, >>

比較子:==, !=, <, >, <=, >=

如果想重載==,必須還要重載!=

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.