覆写值类型的 Equals

      对于值类型,Equals 的继承的实现使用反射库,并比较所有字段的内容。反射需要消耗大量计算资源,可能没有必要比较每一个字段是否相等。如果希望用户对实例进行比较或排序,或者希望用户将其作为哈希表键,则值类型必须实现 Equals。如果编程语言支持运算符重载,则还应提供等号和不等号运算符的实现。

 

    public struct Point : IEquatable<Point>   
    {       
        private readonly int _X;       
        private readonly int _Y;        

        public Point(int x, int y)       
        {           
            _X = x;           
            _Y = y;       
        }        

        public int X       
        {           
            get { return _X; }       
        }        

        public int Y       
        {           
            get { return _Y; }       
        }        

        public override int GetHashCode()       
        {           
            return _X.GetHashCode() ^ _Y.GetHashCode();       
        }        

        public override bool Equals(object obj)       
        {           
            if (!(obj is Point))               
                return false;            

            return Equals((Point)obj);       
        }        

        public bool Equals(Point other)       
        {           
            if (_X != other._X)               
                return false;            

            return _Y == other._Y;       
        }        

        public static bool operator ==(Point point1, Point point2)       
        {           
            return point1.Equals(point2);       
        }        

        public static bool operator !=(Point point1, Point point2)       
        {           
            return !point1.Equals(point2);       
        }   
    }

 

    <摘自MSDN>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值