c#實現邏輯運算子的重載(關鍵字operator)

來源:互聯網
上載者:User
繼續看代碼

/*
 * Created by SharpDevelop.
 * User: noo
 * Date: 2009-9-1
 * Time: 11:45
 * 
 * 運算子,如+,-,*,/,==,!=,>,<等,只是對系統預定義的資料類型,如int,float,double,string等,進行的一些操作
 * 比如說:系統可以識別int+int,string+string,float>float等,這是因為系統在這些資料類型中對這些運算子作了重載
 * 也就是寫了實現的代碼,不然代碼是不能通過編譯的。但是如果我們自己定義了一個類(如向量類Vector),能否實現諸如+,-,>,<的運算子呢?
 * 這是不可能的所以這個時候就需要我們告訴電腦"+"在這個類(Vector)中代表的意思是什麼,電腦應該怎樣操作Vector+Vector
 * 這就涉及到運算子的重載問題
 * 
 * 自訂類(向量類)的邏輯運算子的重載
 */
using System ;
class Vector//向量類
{
    private double X,Y,Z;
    public Vector(double x,double y,double z)//向量的x,y,z座標
    {
        this.X =x;
        this.Y =y;
        this.Z =z;
    }
    public static bool operator ==(Vector v1,Vector v2)//判斷兩個向量是否相等
    {
        return (v1.X ==v2.X && v1.Y ==v2.Y && v1.Z ==v2.Z);
    }
    public static bool operator !=(Vector v1,Vector v2)//判斷兩個向量是否不等,並且這個同上面一個重載必須同時出現,也就是說這兩個重載要成對出現。
    {
        return !(v1==v2);//同下面一句等價
//        return (v1.X !=v2.X || v1.Y !=v2.Y ||v1.Z !=v2.Z );
    }
    public static bool operator >(Vector v1,Vector v2)//判斷向量v1是否大於向量v2
    {
        return (v1.X >v2.X && v1.Y >v2.Y && v1.Z >v2.Z );
    }
    public static bool operator <(Vector v1,Vector v2)//判斷向量v1是否小於向量v2,同樣這兩個重載必須成對出現
    {
        return !(v1>v2);//同下面一句等價
//        return (v1.X <v2.X && v1.Y <v2.Y && v1.Z <v2.Z );
    }
    
    //下面兩個重載函數不會影響編譯的結果,但如果不寫總會會提示說沒有重載這兩個函數,所以還是加上來。這個同算術運算子稍有不同
    public override bool Equals(object obj)
    {
        return base.Equals(obj);
    }
    public override int GetHashCode()
    {
        return base.GetHashCode();
    }
}
class test
{
    static void Main()
    {
        Vector vec1=new Vector (4,5,6);
        Vector vec2=new Vector (-8,2,0);
        Console.WriteLine (vec1==vec2);//輸出false
        Console.WriteLine (vec1>vec2);//輸出true
    }
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.