微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

在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.这是多余的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐