2011-11-16 29 views
6

据我所知,除了.net中的接口外,所有东西都是从对象派生的。但我注意到,当我按“”。出现接口名称Equals方法后。而当我按F12等于方法时,它将指向对象类中的equals方法。如果接口不是从对象类派生的,那么equals方法来自哪里?接口中的等价方法

回答

1

接口只能存在于对象上。

+0

我不相信这明显地回答了这个问题。 – ChaosPandion

2

任何实现接口的类型最终都会从对象派生,因此Equals总是被定义的。

+0

为什么不提供ToString()方法? –

+2

它可用。 –

14

从C#4规范的部分13.2:

注意,在类对象的成员不是,严格地说,任何接口的构件(第13.2节)。但是,类对象中的成员可以通过任何接口类型(§7.4)中的成员查找来使用。

而第7.4:

  • 首先,一个名为N组访问的成员的确定:
    • ...
    • 否则,该组由所有可访问(§的3.5)T中名为N的成员,包括继承成员和对象中名为N的可访问成员。 [...]

而第7.4.1:

对于成员查找的目的,类型T被认为是具有以下基类型:

...

•如果T是接口类型,T的基类型是T和类类型对象的基接口。

基本上这是一个忽悠,让编译器明白的object成员将始终真的可在执行时,即使他们没有真正参与的接口表达的类型的成员。

+0

对于C#4规范说明书+1约翰...... –

+0

此外,让这些成员可用也是有意义的。 – ChaosPandion