考虑以下示例。
public interface IAnimal
{
void MakeSound();
}
public class Dog: IAnimal
{
public void MakeSound() { Console.WriteLine("Bow-Bow-Bow"); }
public static void Main()
{
IAnimal a = new Dog();
Console.WriteLine(a.MakeSound());
Console.WriteLine(a.ToString());
}
}
接口实例如何访问来自System.Object的ToString方法?我的理解是,通过接口,人们只能访问接口所持有的方法。
答案 0 :(得分:4)
您的类隐式派生自System.Object
:
语言通常不需要类来声明从Object继承,因为继承是隐式的。 [MSDN]
更新:
刚发现这个,可能重复? :
Do interfaces derive from System.Object? C# spec says yes, Eric says no, reality says no
答案 1 :(得分:2)
因为 所有内容 是一个对象。这是一个赛狗的答案,但这就是.NET的工作原理。 :)
答案 2 :(得分:0)
我的理解是,使用接口,只能访问方法 接口成立。
实际上,通过一个接口,您可以访问该接口包含{em>和 System.Object
的所有成员的方法(如您所知)。这并不意味着接口本身是从System.Object
派生出来的,仅意味着在检查声明为接口的变量上的成员时,编译器具有“特殊情况”。
编译器可以执行此操作,因为接口是由对象实现的,并且所有对象都来自System.Object
。
因此,将a
声明为IAnimal
时,实际上意味着变量a
包含一个实现接口IAnimal
的对象。确保该对象支持IAnimal
和所有成员System.Object
中的所有成员。