C# 接口如何获得Equals和对象类中定义的其他方法
代码示例:C# 接口如何获得Equals和对象类中定义的其他方法,c#,C#,代码示例: List<ITest> tests = new List<ITest>(); tests.Add(new Test()); tests.Add(new Test()); Console.WriteLine(tests[0].Equals(tests[1])); List tests=newlist(); 添加(新测试()); 添加(新测试()); Console.WriteLine(测试[0]。等于(测试[1]); 我知道在Java中,对象类中的公共实例
List<ITest> tests = new List<ITest>();
tests.Add(new Test());
tests.Add(new Test());
Console.WriteLine(tests[0].Equals(tests[1]));
List tests=newlist();
添加(新测试());
添加(新测试());
Console.WriteLine(测试[0]。等于(测试[1]);
我知道在Java中,对象类中的公共实例方法在编译时被插入到接口定义中;这也是C#中的行为吗?C#中也会发生同样的情况:Equals
和GetHashCode
是在System.Object
类中实现的方法。您自己的类可以(但并不总是需要)重写它们
与Java中一样,默认的对象
实现执行引用相等(对于类
es)。也就是说,对于两个对象a
和b
:a.Equals(b)
意味着object.ReferenceEquals(a,b)
(但不是相反,因为a
可以null
)<代码>GetHashCode的实现与此行为相匹配
对于
struct
s,情况稍有不同:Equals
默认情况下尝试比较struct
中的所有字段以获得成对相等性。Krishna,当您的列表是ITest列表时,您正在添加从System.Object继承的测试对象。
如果您对此有疑问,请尝试覆盖测试对象中的Equals,并放置一条日志语句。另请参见此问题:我正在寻找接口中“Equals”和作为对象类一部分的其他方法的可用性背后的原因refereces@Krishna:嗯,.NET中的接口是引用类型,所以尽管这看起来很奇怪,在这方面,它们源自
System.Object
。谢谢;你对此有把握吗;我是否可以使用ILDASM或其他工具验证这一点?