0

可能重复:
接口是否派生自 System.Object?C# 规范说是,Eric 说不,现实说不

据说.net中的所有对象都继承自System.Object。真的吗?

我尝试在 MSDN 上查找 Ilist 接口继承自哪个对象,但没有提及它的继承。

谁能告诉我一些事情?

4

1 回答 1

1

接口本身不是类层次结构中的对象。从它们代表一个对象的意义上说,它们是“类型”。但它们本身并不是具体的类。

例如,您不能实例化IList<int>. 这不会编译:

var list = new IList<int>();

但是,您可以创建一个List<int>,它确实继承自System.Object

var list = new List<int>();

这个实例list可以看作是许多不同的接口。例如:

var listVariantA = list as IList<int>();
var listVariantB = list as IEnumerable<int>();

等等。这是因为它的具体类型List<int>实现了多个接口。它不会从它们继承,因为它们本身不是具体类型。

似乎您迷路的地方在于继承和接口之间的不同。有人可能会说接口是“.NET 对多重继承的回答”,这是一个公平的说法。但这两个概念之间存在根本区别。将继承视为对象的层次结构

Vehicle
  Car
    Honda Accord
    Toyota Camry
  Truck
    Ford F150

等等。接口不适合这种层次结构。相反,将接口视为对象满足的契约。例如,所有Vehicle对象都可能实现该IDrivable接口。其中一些可能会实现该IFlyable接口。有些仍然可能同时实现(飞行汽车)。

于 2013-02-01T14:48:21.637 回答