接口如何获得Equals和Object类中定义的其他方法

时间:2009-11-23 09:08:58

标签: c#

代码示例:

List<ITest> tests = new List<ITest>();
tests.Add(new Test());
tests.Add(new Test());

Console.WriteLine(tests[0].Equals(tests[1]));

我开始知道在Java中,Object类中的公共实例方法在编译时插入到接口定义中;这是C#中的行为吗?

2 个答案:

答案 0 :(得分:0)

在C#中也是如此:EqualsGetHashCode是在System.Object类中实现的方法。你自己的课程可以 - 但并不总是需要 - 覆盖它们。

与Java类似,默认的object实现执行引用相等(对于class es)。即以下适用于两个对象aba.Equals(b)隐含object.ReferenceEquals(a, b)(但反之亦然,因为a可以是null) 。实现GetHashCode以匹配此行为。

对于struct,情况略有不同:默认情况下,Equals会尝试比较struct中所有字段的成对相等性。

答案 1 :(得分:0)

Krishna,虽然您的List是ITest列表,但您正在添加继承自System.Object的Test对象。 尝试在Test对象中覆盖Equals并在怀疑时添加一个日志记录语句。