在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] 举报,一经查实,本站将立刻删除。