Object.Equals
メソッド (オブジェクト)に関する Microsoft の MSDN ライブラリの記事( 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
。)
ここで、return base.Equals((Point)obj)
わざわざ obj を にキャストする必要はありPoint
ません。
アップデート:
.NET 4.0 バージョンのドキュメントを確認すると、タイプミスである可能性があると思いますが、これはワンライナーです。
return base.Equals(obj) && z == ((Point3D)obj).z