覆盖等于:typeof返回静态类型

时间:2012-07-13 05:03:05

标签: c# .net msdn

在Microsoft的MSDN Library关于 Object.Equals方法(对象)的文章中,(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,因为它返回静态类型。)

上述陈述的含义 - 用简单的术语表示 - 这里的注意事项是什么?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

  • typeof采用类型名称(您在编译时指定)。
  • GetType获取实例的运行时类型。

    Check here For Details