在Microsoft的MSDN Library关于Object.Equals Method(Object)的文章中,(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;
// ...
}
Run Code Online (Sandbox Code Playgroud)
在随后的文件中,我注意到以下陈述.
(注意,这里不使用typeof,因为它返回静态类型.)
上述陈述的含义是什么 - 简单来说 - 这里的注意事项是什么?
在他们的示例中,在Point.Equals()的实现中,如果使用typeof(Point)而不是GetType(),则他们将无法在Point3D.Equals()的实现中利用base.Equals(),因为它总是会返回false.
通过使用GetType(),它确保了类型的运行时评估,而不是将类型比较硬编码为typeof(Point); 它允许子类依赖基类进行类型比较,同时允许子类专注于它补充基类的数据.