在C#中,接口Type没有从System.Object继承?

时间:2013-02-01 14:39:57

标签: c# .net types

  

可能重复:
  Do interfaces derive from System.Object? C# spec says yes, Eric says no, reality says no

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

我试图找到Ilist接口在MSDN上继承的对象,但没有提及它的继承。

有人可以告诉我什么吗?

1 个答案:

答案 0 :(得分: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接口。有些人仍然可能同时实施(飞行汽车)。