重複の可能性:
インターフェイスは System.Object から派生しますか? C# 仕様はイエス、エリックはノー、現実はノー
.net のすべてのオブジェクトは System.Object から継承されていると言われています。本当?
MSDN で Ilist インターフェイスが継承したオブジェクトを見つけようとしましたが、その継承については言及されていません。
誰か教えてくれませんか?
重複の可能性:
インターフェイスは System.Object から派生しますか? C# 仕様はイエス、エリックはノー、現実はノー
.net のすべてのオブジェクトは System.Object から継承されていると言われています。本当?
MSDN で Ilist インターフェイスが継承したオブジェクトを見つけようとしましたが、その継承については言及されていません。
誰か教えてくれませんか?
インターフェイス自体は、クラス階層のオブジェクトではありません。これらは、オブジェクトを表すという意味で「型」です。しかし、それらはそれ自体が具体的なクラスではありません。
たとえば、 をインスタンス化することはできません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 の答え」であると言う人もいるかもしれませんが、これは公正な主張です。しかし、この 2 つの概念には根本的な違いがあります。継承は、オブジェクトが何であるかの階層と考えてください。
Vehicle
Car
Honda Accord
Toyota Camry
Truck
Ford F150
等々。インターフェイスはこの階層に収まりません。代わりに、インターフェイスを、オブジェクトが満たすコントラクトと考えてください。たとえば、すべてのVehicle
オブジェクトがインターフェイスを実装する場合がありIDrivable
ます。それらのいくつかは、インターフェースを実装している可能性がありIFlyable
ます。両方を実装する人もいます (空飛ぶ車)。