이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 22702|회답: 0

[출처] C#에는 컬렉션을 위한 여러 종류의 롤업이 있습니다

[링크 복사]
게시됨 2014. 11. 11. 오전 8:44:59 | | |
각 요소를 순회하여 접근할 수 있는 객체 집합을 나타내는 컬렉션(특히 foreach 루프를 사용해 접근할 수 있음)
컬렉션은 여러 요소를 포함하며, 즉 컬렉션 클래스 객체와 N개의 요소 객체가 존재합니다

모든 컬렉션 클래스가 IEnumerable 인터페이스를 구현하기 때문에, 모든 컬렉션 클래스 객체는 GetEnumerator() 메서드를 가지고 있으며, 이 메서드는 IEnumerator 인터페이스를 구현한 객체를 반환할 수 있습니다. 이 객체는 컬렉션 클래스 객체도 컬렉션 요소 클래스 객체도 아니고 독립적인 클래스 객체입니다. 이 객체는 컬렉션 클래스 객체 내 각 요소 객체를 반복 재생할 수 있게 해줍니다

컬렉션 클래스가 사용자 정의 컬렉션 클래스라면, 사용자는 GetEnumerator() 메서드를 구현해야 하며, 그렇지 않으면 루프를 사용할 수 없습니다. 물론, 이 커스텀 컬렉션 클래스(인터페이스를 구현하는 클래스)에 대응하는 IEnumerator 클래스도 커스터마이즈되어야 합니다

예를 들어, ArrayList 컬렉션 클래스에 대응하는 IEnumerator는 ArrayListEnumeratorSimple입니다
            배열 컬렉션 클래스에 대응하는 IEnumerator는 SZArrayEnumerator입니다
      (두 클래스 모두 .NET Framework 클래스 라이브러리 문서(MSDN)에는 다루어지지 않습니다)

1. System.Colloction에서 컬렉션의 동작을 나타내는 인터페이스는 다음과 같습니다:
1) 인식
모든 컬렉션의 크기, 열거 수, 동기화 방법을 정의하세요. IEnumerable에서 파생됨
이 클래스는 컬렉션 클래스의 가장 기본적인 동작을 정의하며, 모든 컬렉션 클래스는 이 인터페이스(기본 인터페이스)를 구현합니다
하지만 동작이 너무 기본적이라서, 주로 Count 속성이기 때문에 혼자서 구현하는 것은 별로 의미가 없습니다

2) IEnumerable
집합에 대한 간단한 반복을 지원하는 열거를 노출한다
이 방법은 GetEnumerator()라는 단 하나의 메서드만 가지고 있으며, 이 인터페이스는 IEnumerator를 통해 컬렉션을 탐색할 수 있습니다
기본적으로 모든 컬렉션 클래스가 이 인터페이스를 구현합니다

3) 일리스트
IList 구현은 정렬 가능하고 구성원의 인덱스로 접근할 수 있는 값들의 집합이며, 자체적으로 ICollection과 IEnumerable 인터페이스를 구현합니다
는 모든 리스트의 추상 기본 클래스입니다. IList 구현에는 읽기 전용, 고정 크기, 가변 크기의 세 가지 범주가 있습니다.

4) 신원 사전
IDictionary 구현은 ICollection과 IEnumerable 인터페이스를 구현하는 키/값 쌍의 집합입니다
는 키/값 쌍 집합의 기본 인터페이스입니다. IDictionary 구현에는 읽기 전용, 고정 크기, 가변 크기의 세 가지 범주가 있습니다.
IDictionary는 사전, 맵 또는 샤시 리스트라고 불릴 수 있으며, 키(모든 유형의 키)를 기반으로 값에 접근합니다.

2. System.Collections에서 직접 사용할 수 있는 컬렉션 클래스는 다음과 같습니다:
1) ArrayList
인터페이스 구현: IList, ICollection, IEnumerable
컬렉션이 수정되지 않는 한, ArrayList는 동시에 여러 리더를 안전하게 지원할 수 있습니다
ArrayList에 요소가 추가될 때, 용량은 재할당(2배 증가)을 통해 자동으로 증가합니다
객체 배열을 생성해야 하지만 배열 크기를 미리 모른다면 ArrayList를 사용할 수 있습니다
ArrayList는 모든 요소를 객체로 참조하므로, ArrayList 내 요소에 접근할 때 반드시 타입을 지정해야 합니다
장점: 크기를 동적으로 변경할 수 있고, 요소의 삽입과 제거가 유연하고 편리하며, 정렬 가능성
단점: 삽입 성능은 배열만큼 좋지 않고, 강력한 타입은 아닙니다

2) 비트어레이
인터페이스 구현: ICollection과 IEnumerable
압축된 비트 배열을 관리하세요.

3) 해시테이블
인터페이스 구현: IDictionary, ICollection, IEnumerable
ArrayList 같은 요소들은 Hashtable에 자유롭게 추가하거나 제거할 수 있지만, 성능 부담 없이 사용할 수 있습니다

4) 정렬목록
인터페이스 구현: IDictionary, ICollection, IEnumerable
SortedLIst는 ArrayList와 해시테이블의 장점을 결합했으며, 키 값으로 정렬할 수 있습니다

5) 줄기
인터페이스 구현: ICollection과 IEnumerable
퀘케는 개별 요소에 대한 선입선출 접근 방식의 큐입니다
Queque 객체의 GetEnumerator() 메서드를 호출하면 IEnumerator 객체가 큐 내 요소들을 반복하도록 할 수 있습니다

6) 스택
인터페이스 구현: ICollection과 IEnumerable
스택은 개별 요소에 대해 늦게 들어가 선출 방식으로 접근하는 스택입니다
Stack 객체의 GetEnumerator() 메서드를 호출하면 IEnumerator 객체가 스택 내 요소들을 반복하도록 할 수 있습니다

3. 위에서 언급한 컬렉션 클래스들은 모두 일반 컬렉션 클래스이며, 객체가 입력될 때 대부분의 요소는 객체 타입에 속합니다
컬렉션 이후에는 원래의 타입 정보가 사라지며, 즉 이러한 일반 콜렉션 클래스들은 강타입이 되지 않습니다
우회 방법은 강타입 컬렉션 클래스를 사용하는 것입니다
System.Collections 네임스페이스
System.Collections.Specialized된 네임스페이스 일부 클래스는 요구사항을 충족할 수 있으며 직접 또는 상속할 수 있습니다





이전의:싱글데이 전야에 다수의 멍청이들에게 보내는 공개 서한
다음:C# 일반 레인지로버 (턴)
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com