C# 操作符重載學習

   操作符重载是指允许用户使用用户定义的类型编写表达式的能力。
例如,通常需要编写类似于以下内容的代码,以将两个数字相加。很明显,sum 是两个数字之和。
int i = 5;
int sum = i + j;
如果可以使用代表复数的用户定义的类型来编写相同类型的表达式,那当然是最好不过了:
Complex i = 5;
Complex sum = i + j;
运算符重载允许为用户定义的类型重载(即指定明确的含义)诸如“+”这样的运算符。如果不进行重载,则用户需要编写以下代码:
Complex i = new Complex(5);
Complex sum = Complex.Add(i, j);
此代码可以很好地运行,但 Complex 类型并不能象语言中的预定义类型那样发挥作用。

轉自:http://www.ixpub.net/archiver/tid-677435.html


在我看來是操作符重載是讓struct、class、Interface等能夠進行運算。

如時實現操作符重載:
先寫關鍵字public和static,后跟返回類型,后跟operator關鍵字,后跟要聲明的操作符符號,最后在對一對圓括號中添加恰當的參數。
 如下例中的 struct  Hour中的 public  static  Hour  operator +  (Hour lhs,Hour rhs){...}

操作符重載方法:
   1、編寫操作符重載方法。
   2、實例化后,進行操作符運算
下邊用代碼進行說明:
     class  Program
    {

        
static   void  Main( string [] args)
        {

            Hour hrValue1 
=   new  Hour( 10 );
            Hour hrValue2 
=   new  Hour( 20 );

            
// 2、得到兩個Hour相加結果
            Hour hrSum  =  hrValue1  +  hrValue2;

            
// 得到Hour+Int的結果
            Hour hrSumInt  =  hrValue1  +   10 ;

            
// 得到Int+Hour的結果
            Hour hrIntSum  =   11   +  hrValue2;
            Console.WriteLine(
" hrValue1 +  hrValue2 = {0} " , hrSum.iValue);
            Console.WriteLine(
" hrValue1 +  10  = {0} " , hrSumInt.iValue);
            Console.WriteLine(
" 11 +  hrValue2  = {0} " , hrIntSum.iValue);
            Console.ReadKey();
        }
        
struct  Hour
        {
            
private   int  value;
            
// 此構造函數根據int值創建Hour類
             public  Hour( int  iValue)
            {
                
this .value  =  iValue;
            }
           
            //定義一個屬性,便於取用value值
            public   int  iValue
            {
                
get
                {
                    
return  value;
                }
            }
            
//1、 聲明一個二元操作符,將兩個Hour類加到一起 
             public   static  Hour  operator +  (Hour lhs,Hour rhs)
            {
                
return   new  Hour(lhs.value  +  rhs.value);
            }

            
/*
             操作符是public的。所有操作符都必須是public的
             操作符是static的。所有操作符都必須是static的,操作永遠不具有多態性,
             面且不能使用virtual、abstract、override或者sealed修飾符。
             二元操作符(比如+)有兩個顯式參數;一元操作符有一個顯式的參數
             

            我們有了public Hour(int iValue)構造函數,就可以將一個int與Hour相加,只是首先要將int轉換成為Hour
            hour a=;
            int b=;
            Hour sum=a+new Hour(b);
            雖然上述代碼完全有效,但相較於讓一個Hour和一個int直接相加它即不清晰也不準確。
            為了使Hour可以+ int,必須聲明一個二元操作符+,它的第一個參數是Hour,第二個參數是一個int。
             
*/
            
public   static  Hour  operator +  (Hour lhs, int  rhs)
            {
                
return  lhs  +   new  Hour(rhs);
            }
            
// 使一個int 可以+hour。
             public   static  Hour  operator   + ( int  lhs, Hour rhs)
            {
                
return   new  Hour(lhs) + rhs;
            }
        }
    }

示例2:
         struct  Hour
        {
            
public   int  iValue;
            
// 構造函數
             public  Hour( int  initialValue)
            {
                
this .iValue  =  initialValue;
            }
            
// 1、定義操作符重載(一元操作符)
             public   static  Hour  operator   ++  (Hour huValue)
            {
                huValue.iValue
++ ;
                
return  huValue;
            }

            
// ==操作符是二元操作符,必須帶有兩個參數
             public   static   bool   operator == (Hour lhs,Hour rhs)
            {
                
return  lhs.iValue  ==  rhs.iValue;
            }
            
public   static   bool   operator != (Hour lhs,Hour rhs)
            {
                
return  lhs.iValue  !=  rhs.iValue;
            }
        }

        
// ++操作符有前綴和后綴的形式,C#能智能地為前綴后后綴使用同一個操作符。
         static   void  Main( string [] args)
        {
            
// 2、實例化類
            Hour hu  =   new  Hour( 10 );
            
// 3、
            
// 操作符重載
            hu ++ ;
            
// 輸出重載后的結果
            Console.WriteLine( " Hu++ = {0} " , hu.iValue);
            
// 操作符重載
             ++ hu;
            
// 輸出重載后的結果
            Console.WriteLine( " Hu++ = {0} " , hu.iValue);
            Console.ReadKey();
        }   

你可能感兴趣的:(操作符)