打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# 为自定义结构体point 重写equals 方法,并实现自己的强类型Equals方法

public struct StructerPoint

    {

        public int x;

        public int y;

        public override bool Equals(object obj)

        {

            if (obj == null)//it can be ignore, because if the obj is null,(obj is StructerPoint) will return false.

                return false;

            if (!(obj is StructerPoint))//if obj is not StructerPoint Type ,obviuosly return flase

                return false;

            return Equals((StructerPoint)obj);//it have been ensure that it is StructerPoint Type at above codes,so this cast is safe and will not throw any exception

        }

        /// <summary>

        /// this my strong type Equals mothed.if all the element have the same Tyep and value ,they can be considered equals.

        /// </summary>

        /// <param name="obj">an object is ensure StructerPoint type. </param>

        /// <returns></returns>

        public bool Equals(StructerPoint obj)

        {

            StructerPoint sp = obj;

            if (!(this.x.Equals(sp.x)))

                return false;

            if (!(this.y.Equals(sp.y)))

                return false;

            return true;

        }

    }

//struct 类型的对象,隐式继承于Object.ValueType, Object.ValueType里有虚方法 public bool virsual Equals(Object obj)

//所以在自定义的struct 类型 对象里,建议重写该方法,使得该方法返回期望的结果。

//这里还新定义自己的强类型的Equals 方法。两个Equals方法的不同之处,就是参数不同。

//重写的Equals方法的参数是一个object 类型的。自定义的强类型Equals方法的参数是StructerPoint 类型的。

//当我们调用Equals方法的时候,程序会根据参数类型决定调用哪一个方法。这其实就是重载的概念了。

//不要以为只有类才有重载,结构也有的。

//简单点讲,如果参数不是StructerPoint类型的,都将会调用 public override bool Equals(object obj)方法。

//public override bool Equals(object obj)方法 其实只是做了 判断参数为空和判断参数类型 两个操作。

//然后调用强类型的Equals方法。也可以将强类型的Equals方法的语句合并到重载的方法中,这看个人喜好了。

//但是这关乎到一个效率的问题。如果能判定参数是StructerPoint类型的话,直接调用public bool Equals(StructerPoint obj)

//效率会更高一点。

//也不知道我表达清楚没有...中文表达尚有问题,不敢用英文写...

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
c#中什么是类和对象
关于Unity.Object的非空判断
Equals 和 == 的区别
==和equals
java基础Integer与Integer比较
==和equals方法的区别是什么?hashCode方法的作用?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服