1. ホーム
  2. c#

C#ですべての配列が実装しているインターフェースは何か?

2023-07-11 05:37:33

質問

新しい.NET 3.5プログラマとして、私はLINQを学び始め、私が今まで気づかなかったかなり基本的なことを発見しました。

この本では、すべての配列が IEnumerable<T> を実装していると主張しています (明らかに、そうでなければ配列で LINQ to Objects を使用することはできません...)。これを見たとき、そんなこと考えたこともなかったと思い、すべての配列は他に何を実装しているのかと自問しました - そこで、私は System.Array をオブジェクト ブラウザで調べてみると (これは CLR のすべての配列の基本クラスなので)、驚いたことに、これは IEnumerable<T> .

そこで質問ですが、その定義はどこにあるのでしょうか?つまり、どの配列がどのインターフェイスを実装しているのかを正確に知るにはどうしたらよいのでしょうか?

どのように解決するのですか?

からの ドキュメント を参照してください (強調)。

[...] Array クラスは System.Collections.Generic.IList<T> , System.Collections.Generic.ICollection<T>System.Collections.Generic.IEnumerable<T> といった汎用的なインターフェイスがあります。 実装は実行時に配列に提供されるため、ドキュメントのビルドツールからは見えません。

EDITです。 Jb Evain氏のコメントで指摘されているように、ベクター(一次元配列)だけがジェネリックインターフェースを実装しています。については なぜ 多次元配列はジェネリックインタフェースを実装しているので、よくわかりません(下記のクラス宣言を参照)。

このクラスは System.Array クラス(つまり ごとに 配列) もこれらの非一般的なインタフェースを実装しています。

public abstract class Array : ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable