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.这是多余的.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |