この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 22702|答える: 0

[出典] C#にはコレクション用のロールアップがいくつかあります

[リンクをコピー]
掲載地 2014/11/11 8:44:59 | | |
各要素を巡査することでアクセス可能なオブジェクトの集合(特にforeachループを使ってアクセス可能)を表す集合
コレクションは複数の要素を含みます。すなわち、コレクションクラスオブジェクトとN個の要素オブジェクトがあります

任意のコレクションクラスはIEnumerableインターフェースを実装しているため、任意のコレクションクラスオブジェクトはGetEnumerator()メソッドを持ち、IEnumeratorインターフェースを実装するオブジェクトを返すことができます。IEnumeratorインターフェースはコレクションクラスオブジェクトでもコレクション要素クラスオブジェクトでもなく、独立したクラスオブジェクトです。 このオブジェクトは、コレクションクラスオブジェクト内の各要素オブジェクトを順番に順番に進めることを可能にします

もしコレクションクラスがユーザー定義のコレクションクラスである場合、ユーザーはGetEnumerator()メソッドを実装しなければならず、そうでなければループは使えません。 もちろん、このカスタムコレクションクラスに対応するIEnumeratorクラス(インターフェースを実装するクラス)もカスタマイズする必要があります

例えば、ArrayListコレクションクラスに対応するIEnumeratorはArrayListEnumeratorSimpleです
            配列コレクションクラスに対応するIEnumeratorはSZArrayEnumeratorです
      (これらのクラスは.NET Frameworkクラスライブラリのドキュメント(MSDN)には記載されていません)

1. System.Colloctionsでコレクションの挙動を表すインターフェースは以下の通りです:
1) 認知
すべてのコレクションのサイズ、列挙数、同期方法を定義します。 IEmemerableから派生
これはコレクションクラスの最も基本的な動作を定義しており、すべてのコレクションクラスはこのインターフェース(基本インターフェース)を実装しています
しかし、その挙動はあまりにも単純で、主にCountプロパティであり、単独で実装するのはあまり意味がありません

2) IEnumerable
集合上の単純な反復をサポートする列挙を公開します
GetEnumerator()という1つのメソッドのみを持ち、IEnumeratorインターフェースを返してコレクションを巡査できます
基本的にすべてのコレクションクラスがこのインターフェースを実装しています

3) 独立主義者
IList実装は、メンバーのインデックスでソート可能でアクセス可能な値の集合体であり、ICollectionおよびIEnumerableインターフェースも実装しています
はすべてのリストの抽象基底クラスです。 IList実装には3つのカテゴリーがあります:読み取り専用、固定サイズ、可変サイズです。

4) IDictionary
IDictionary実装は、ICollectionおよびIEnumerableインターフェースを実装するキー/値ペアの集合です
はキー/値ペアの集合の基本インターフェースです。 IDictionaryの実装には、読み取り専用、固定サイズ、可変サイズの3つのカテゴリーがあります。
IDictionaryは辞書、マップ、またはシャッシュリストと呼ばれ、キー(任意のタイプ)に基づいて値にアクセスします。

2. System.Collectionsで直接使用できるコレクションクラスは以下の通りです:
1) ArrayList
インターフェース実装:IList、ICollection、IEnumerable
コレクションが変更されない限り、ArrayListは複数のリーダーを同時に安全にサポートできます
ArrayListに要素が追加されると、容量は自動的に再割り当て(2倍増加)によって需要に応じて増加します
もしオブジェクトの配列を作成する必要があるけれど、配列のサイズが事前に分からない場合は、ArrayListを使うことができます
ArrayListはすべての要素をオブジェクトとして参照するため、ArrayList内の要素にアクセスする際には型付けが必要です
メリット:サイズを動的に変更できること、要素の挿入・削除が柔軟かつ便利であること、ソートしやすさ
欠点:挿入性能は配列ほど良くなく、強力なタイプではありません

2) ビットアレイ
インターフェースの実装:ICollectionおよびIEnumerable
圧縮されたビット値の配列を管理します。

3) ハッシュテーブル
インターフェースの実装:IDictionary、ICollection、IEnumerable
HashtableにはArrayListのような要素を自由に追加・削除できますが、パフォーマンスの負担はかかりません

4) SortedList
インターフェースの実装:IDictionary、ICollection、IEnumerable
SortedLIstはArrayListとHashtableの利点を組み合わせており、キー値でソート可能です

5) キュー
インターフェースの実装:ICollectionおよびIEnumerable
クエケはキューで、個々の要素への先入れ先出しアクセスです
QuequeオブジェクトのGetEnumerator()メソッドを呼び出してIEnumeratorオブジェクトにキュー内の要素を逐復させることができます

6) スタック
インターフェースの実装:ICollectionおよびIEnumerable
スタックとは、個々の要素に対して後入れ先出しの方法でアクセスするスタックのことです
スタックオブジェクトのGetEnumerator()メソッドを呼び出してIEnumeratorオブジェクトにスタック内の要素を逐復させることができます

3. 上記のコレクションクラスはすべて一般的なコレクションクラスであり、オブジェクトが入れる際に受け入れられる要素のほとんどはオブジェクト型です
コレクションの後、元の型情報は失われます。つまり、これらの一般的なコレクションクラスは強型付けされていません
回避策としては、強型付けのコレクションクラスを使うことです
System.Collections 名前空間
System.Collections.Specializedな名前空間 一部のクラスは要件を満たし、直接または継承可能です





先の:シングルズデーの前夜、大多数の男たちへの公開書簡
次に:C# 汎用レンジローバー(ターン)
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com