Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 接口如何获得Equals和对象类中定义的其他方法_C# - Fatal编程技术网

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或其他工具验证这一点?