代码示例:
List<ITest> tests = new List<ITest>();
tests.Add(new Test());
tests.Add(new Test());
Console.WriteLine(tests[0].Equals(tests[1]));我知道在Java语言中,对象类中的公共实例方法在编译时被插入到接口定义中;这在C#中也是这样吗?
发布于 2009-11-23 17:11:52
在C#中也会发生同样的事情:Equals和GetHashCode是在System.Object类中实现的方法。您自己的类可以-但不总是需要-重写它们。
与Java语言类似,缺省的object实现(对于classes)执行引用相等。也就是说,下面两个对象a和b成立:a.Equals(b)表示object.ReferenceEquals(a, b) (但反之亦然,因为a可以是null)。GetHashCode就是为了匹配这个行为而实现的。
对于struct,情况略有不同:默认情况下,Equals会尝试比较struct中的所有字段是否成对相等。
发布于 2010-08-03 14:32:46
Krishna,虽然您的列表是ITest列表,但您添加的是从System.Object继承的测试对象。尝试覆盖Test对象中的Equals,如果您怀疑这一点,则放入一条日志语句。
https://stackoverflow.com/questions/1781914
复制相似问题