可能重复:
Do interfaces derive from System.Object? C# spec says yes, Eric says no, reality says no
据说.net中的所有对象都继承自System.Object。 这是真的吗?
我试图找到Ilist接口在MSDN上继承的对象,但没有提及它的继承。
有人可以告诉我什么吗?
答案 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
接口。有些人仍然可能同时实施(飞行汽车)。