0

重複の可能性:
インターフェイスは System.Object から派生しますか? C# 仕様はイエス、エリックはノー、現実はノー

.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 の答え」であると言う人もいるかもしれませんが、これは公正な主張です。しかし、この 2 つの概念には根本的な違いがあります。継承は、オブジェクト何であるかの階層と考えてください。

Vehicle
  Car
    Honda Accord
    Toyota Camry
  Truck
    Ford F150

等々。インターフェイスはこの階層に収まりません。代わりに、インターフェイスを、オブジェクトが満たすコントラクトと考えてください。たとえば、すべてのVehicleオブジェクトがインターフェイスを実装する場合がありIDrivableます。それらのいくつかは、インターフェースを実装している可能性がありIFlyableます。両方を実装する人もいます (空飛ぶ車)。

于 2013-02-01T14:48:21.637 に答える