接口中的等于方法

Umu*_*ğlu 6 c# inheritance interface

据我所知,除了.net中的接口外,所有内容都来自于对象.但是我注意到当我按下"." 在界面名称出现Equals方法之后.当我按F12 for equals方法时,它会指向对象类中的equals方法.如果接口不是从对象类派生的,那么equals方法来自哪里?

Jon*_*eet 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总是真正可用的成员,即使它们实际上不是接口所涉及的表达式类型的成员.


Kei*_*las 1

接口只能在对象上。