接口中的等于方法

时间:2011-11-16 20:28:28

标签: c# inheritance interface

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

3 个答案:

答案 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)

接口只能在对象上。