代码示例:
List<ITest> tests = new List<ITest>();
tests.Add(new Test());
tests.Add(new Test());
Console.WriteLine(tests[0].Equals(tests[1]));
我开始知道在Java中,Object类中的公共实例方法在编译时插入到接口定义中;这是C#中的行为吗?
答案 0 :(得分:0)
在C#中也是如此:Equals
和GetHashCode
是在System.Object
类中实现的方法。你自己的课程可以 - 但并不总是需要 - 覆盖它们。
与Java类似,默认的object
实现执行引用相等(对于class
es)。即以下适用于两个对象a
和b
:a.Equals(b)
隐含object.ReferenceEquals(a, b)
(但反之亦然,因为a
可以是null
) 。实现GetHashCode
以匹配此行为。
对于struct
,情况略有不同:默认情况下,Equals
会尝试比较struct
中所有字段的成对相等性。
答案 1 :(得分:0)
Krishna,虽然您的List是ITest列表,但您正在添加继承自System.Object的Test对象。 尝试在Test对象中覆盖Equals并在怀疑时添加一个日志记录语句。