c#实现逻辑运算符的重载(关键字operator)

继续看代码
/*
 * 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
    }
}
posted @ 2009-09-01 14:15  爱生活,爱GIS  阅读(792)  评论(0编辑  收藏  举报