2017-07-29 7 views
2

リスト<T>はIList <T>から、IEnumerable <T>からは役に立たないですか?がmscorlib.dllから

List<T>が明示的に自身が ICollection<T>, IEnumerable<T>, IEnumerable由来 IList<T>由来のほかに ICollection<T>, IEnumerable<T>, IEnumerable,から派生する必要がなぜ
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable 
{..} 

public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T> 
{...} 

+1

いいえ、それはmscorlib.dllからのものではありません。 mscorlib.dllにはC#コードが含まれていません。これはあなたの逆コンパイラがあなたに示しているものです。 – hvd

+0

[ReferenceSource](https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs,36)を確認してください –

+0

最終的にこれはあなたの逆コンパイラが役に立ちます。 1つのクラスでどのインタフェースが実装されているかを知ることは非常に便利です。そのような宣言はあいまいであり、「インタフェース継承」という誤った名前の副作用である。 C#の構文は、あなたをより豊かにするような継承のようなものに見えます。なぜなら、これはインターフェイスのメンバーを実装するために必要な作業が実際にはあなたをより貧しくするからです。機能ではなく、バグです。 –

答えて

3

オブジェクトブラウザや反射鏡などにはソースコードがありません。これらのオブジェクトにはメタデータがあります。タイプがインタフェースを直接実装しているかどうかを知ることは容易ではないので、究極の目的はドキュメントであるため、簡単なオプションは、たとえ冗長であってもすべてのインタフェースを表示することです。

詳細については、thisを参照してください。

5

コンパイルされていないコードを元のソースコードの正確な表現にすることを信頼しないでください。

The original source codeはそうです、あなたはList<T>が明示的にICollection<T>などから派生する必要がないことだねだけ

public class List<T> : IList<T>, System.Collections.IList, IReadOnlyList<T> 

含まれています。そうではありません。

関連する問題