接口如何调用对象类的ToString方法

时间:2019-04-14 08:48:39

标签: c#

据我了解,interface不是像其他类一样从Object派生的,因此如何允许接口调用ToString()类的Object方法。

interface I1
{
}

class D
{
    I1 i;
    public D()
    {
        string s = i.ToString(); // why compiler doesn't complain here?
    }
}

修改

正如评论中指出的,从对象派生的一切,这是一些矛盾的文章

https://blogs.msdn.microsoft.com/ericlippert/2009/08/06/not-everything-derives-from-object/

2 个答案:

答案 0 :(得分:3)

您可以使用T中的方法,因为Standard ECMA-334 C# Language Specification这样说:

  

14。表达式

     

14.3成员查找

     

14.3.1基本类型

     

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

     

[...]

     
      
  • 如果T interface-type ,则T的基本类型是object的基本接口和类类型ToString()
  •   

这就是为什么您可以在使用接口作为类型的变量上调用ToString()的原因,即使在该接口中没有定义spawn方法也是如此。

答案 1 :(得分:2)

Inheritance in C# and .NET

节选:

  

除了它们可以通过单继承继承的任何类型之外,.NET类型系统中的所有类型隐式地继承自Object或从其派生的类型。对象的通用功能可用于任何类型。

i必须是实例化类型,因此它可能隐式地(未)装箱到对象,因此.ToString()可以工作。