3

在 Microsoft 的有关Object.Equals Method (Object)的 MSDN 库文章( http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx ) 中,提供了一个示例来演示如何覆盖Equals。它看起来像这样:

public override bool Equals(Object obj) {
    //Check for null and compare run-time types.
    if (obj == null || GetType() != obj.GetType()) return false;
    // ...
}

在随后的文档中,我注意到以下声明。

(注意这里没有使用 typeof,因为它返回的是静态类型。)

上面的陈述是什么意思 - 简单地说 - 这里有什么警告?

4

2 回答 2

5

在他们的示例中,在 Point.Equals() 的实现中,如果使用 typeof(Point) 而不是 GetType(),他们将无法在 Point3D.Equals() 的实现中利用 base.Equals(),因为它总是返回假。

通过使用 GetType(),它确保了类型的运行时评估,而不是将类型比较硬编码到 typeof(Point);它允许子类依靠基类进行类型比较,同时允许子类专注于它补充基类的数据。

于 2012-07-13T05:25:11.700 回答
2
  • typeof 采用类型名称(您在编译时指定)。
  • GetType 获取实例的运行时类型。

    在这里查看详情

于 2012-07-13T05:25:35.020 回答