加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – MSDN代码示例:为什么在调用base.Equals(object)之前进行

发布时间:2020-12-15 21:53:03 所属栏目:百科 来源:网络整理
导读:在Microsoft的MSDN Library关于Object.Equals Method(Object)的文章中,( http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx)提供了一个示例来演示如何重写Equals.它看起来像这样: class Point{ ... // IEquatablePoint is not implemented. public ov
在Microsoft的MSDN Library关于Object.Equals Method(Object)的文章中,( http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx)提供了一个示例来演示如何重写Equals.它看起来像这样:

class Point
{
   ... // IEquatable<Point> is not implemented.

   public override bool Equals(Object obj) 
   {
      //Check for null and compare run-time types. 
      if ((obj == null) || ! this.GetType().Equals(obj.GetType())) {
         return false;
      }
      else { 
         Point p = (Point) obj; 
         return (x == p.x) && (y == p.y);
      }   
   }
}

sealed class Point3D: Point 
{
   int z;

   public override bool Equals(Object obj) 
   {
      Point3D pt3 = obj as Point3D;
      if (pt3 == null)
         return false;
      else 
         return base.Equals((Point)obj) && z == pt3.z; // Here!!!
   }
}

在随后的文件中,我注意到以下陈述.

(如果它是Point3D对象,则将其强制转换为Point对象并传递给Equals的基类实现.)

在这里,返回base.Equals((Point)obj)为什么要把obj转换成Point?

更新:

我想这可能只是一个错字,因为我检查.NET 4.0版本文档,它是一个单行:

return base.Equals(obj) && z == ((Point3D)obj).z

解决方法

将obj投射到Point是没有意义的(哈哈).你是对的,Point.Equals方法也将它转换为Point.这是多余的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读