zoukankan      html  css  js  c++  java
  • 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();
            }   

  • 相关阅读:
    一步一步学lucene——(第四步:搜索篇)
    如何搭建sshpermissions工程
    如何选择ESB
    一步一步学Mule ESB——(第二篇:Ajax篇)
    一步一步学lucene——(第二步:示例篇)
    一步一步学Mule ESB——(第一篇:基础篇)
    三步学会用spring开发OSGI——(第三步:web篇)
    关于SourceForge不能使用的问题
    一步一步学lucene——(第三步:索引篇)
    常用px,pt,em换算表
  • 原文地址:https://www.cnblogs.com/scottckt/p/957317.html
Copyright © 2011-2022 走看看