4

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
4

3 に答える 3

0

Point クラスでは、型を比較しています。

this.GetType().Equals(obj.GetType())

Type Point が Point3D と等しくありません。

于 2013-07-09T21:39:50.577 に答える