据我所知,除了.net中的接口外,所有内容都来自于对象。但是我注意到当我按下“。”在界面名称出现Equals方法之后。当我按F12 for equals方法时,它会指向对象类中的equals方法。如果接口不是从对象类派生的,那么equals方法来自哪里?
答案 0 :(得分:14)
来自C#4规范的第13.2节:
请注意,严格来说,类对象中的成员不是任何接口的成员(第13.2节)。但是,类对象中的成员可通过任何接口类型(第7.4节)中的成员查找获得。
第7.4节:
- 首先,确定一组名为N的可访问成员:
- ...
- 否则,该集合包含T中名为N的所有可访问(§3.5)成员,包括继承成员和对象中名为N的可访问成员。 [...]
第7.4.1节:
出于成员查找的目的,类型T被认为具有以下基本类型:
...
•如果T是接口类型,则T的基类型是T的基接口和类类型对象。
基本上它是一个软糖,让编译器理解object
的成员在执行时总是真正可用,即使他们不是真正的成员类型接口所涉及的表达式。
答案 1 :(得分:2)
任何实现接口的类型最终都是从对象派生的,因此总是定义Equals。
答案 2 :(得分:1)
接口只能在对象上。