在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,因为它返回静态类型。)
上述陈述的含义 - 用简单的术语表示 - 这里的注意事项是什么?
答案 0 :(得分:5)
在他们的例子中,在Point.Equals()的实现中,如果使用typeof(Point)而不是GetType(),他们将无法在Point3D.Equals的实现中利用base.Equals() ()因为它总是返回false。
通过使用GetType(),它确保了类型的运行时评估,而不是将类型比较硬编码为typeof(Point);它允许子类依赖基类进行类型比较,同时允许子类专注于它补充基类的数据。
答案 1 :(得分:2)
GetType获取实例的运行时类型。