Visual C#을 사용하여 사용자 지정 컬렉션 구현
이 단계별 문서에서는 Visual C#에서 사용자 지정 컬렉션을 구현하는 방법을 보여줍니다. Microsoft .NET Framework 기본 클래스 라이브러리는 컬렉션 System.Collections.ICollection
인터페이스에 대한 공식적인 정의를 제공합니다.
원래 제품 버전: Visual C#
원래 KB 번호: 307484
사용자 지정 클래스에서 ICollection 인터페이스 구현
인터페이스는 ICollection
인터페이스에서 IEnumerable
상속됩니다. 인터페이스는 ICollection
메서드와 세 개의 CopyTo
읽기 전용 속성 IsSynchronized
, 즉 , SyncRoot
및 Count
를 정의합니다. ICollection
는 인터페이스에서 GetEnumerator
메서드를 상속합니다 IEnumerable
. 사용자 지정 컬렉션 클래스는 인터페이스를 ICollection
구현해야 합니다.
인터페이스를 ICollection
구현하려면 다음 단계를 수행합니다.
Visual C# .NET에서 Windows 애플리케이션을 만듭니다.
솔루션 탐색기 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 클래스 추가를 클릭하여 CustomCollection이라는 클래스 모듈을 추가합니다.
클래스 모듈의 시작 부분에 다음 샘플 코드를 추가하여 네임스페이
System.Collection
스를 가져옵니다.using System.Collections;
모듈의 다른 코드를 다음 샘플 코드로 바꿉 있습니다.
public class CustomCollection : ICollection { private int[] intArr = {1,5,9}; private int Ct; public CustomCollection() { Ct=3; } }
간단히 하기 위해 클래스는
CustomCollection
세 개의 정수 항목과 개수 변수가 있는 배열을 보유합니다.CopyTo
정수 배열과 인덱스 를 매개 변수로 사용하는 메서드를 구현합니다. 이 메서드는 전달되는 인덱스에서 시작하여 컬렉션의 항목을 배열에 복사합니다. 이 메서드를 구현하려면 공용CustomCollection
생성자 다음에 다음 코드를 붙여넣습니다.void ICollection.CopyTo(Array myArr, int index) { foreach (int i in intArr) { myArr.SetValue(i,index); index = index+1; } }
에서
GetEnumerator
인터페이스IEnumerable
에 의해 상속되는 메서드를ICollection
구현합니다. 메서드는GetEnumerator
컬렉션을 반복할 수 있는 개체를 반환Enumerator
합니다. 메서드 다음에 다음 샘플 코드를 붙여넣습니다CopyTo
.IEnumerator IEnumerable.GetEnumerator() { return new Enumerator(intArr); }
세 개의 읽기 전용 속성을 구현하려면 메서드 다음에 다음 코드를 붙여넣습니다
GetEnumerator
.// The IsSynchronized Boolean property returns True if the // collection is designed to be thread safe; otherwise, it returns False. bool ICollection.IsSynchronized { get { return false; } } // The SyncRoot property returns an object, which is used for synchronizing // the collection. This returns the instance of the object or returns the // SyncRoot of other collections if the collection contains other collections. object ICollection.SyncRoot { get { return this; } } // The Count read-only property returns the number // of items in the collection. int ICollection.Count { get { return Ct; } }
GetEnumerator 메서드에 대한 열거자 개체 구현
이 섹션에서는 를 반복CustomCollection
할 수 있는 클래스를 Enumerator
만드는 방법을 보여줍니다.
클래스 모듈의 end 클래스 문 다음에 다음 샘플 코드를 붙여넣습니다.
public class Enumerator : IEnumerator { private int[] intArr; private int Cursor; }
메서드를
intArr
호출할 때 클래스의CustomCollection
요소를 저장할 프라이빗 정수 배열을GetEnumerator
선언합니다. 필드 멤버는Cursor
열거하는 동안 현재 위치를 보유합니다.를 매개 변수로 사용하여 생성자를
intArr
추가하고 로컬intArr
을 이 값으로 설정합니다. 멤버 필드 선언 다음에 다음 샘플 코드를 붙여넣습니다.public Enumerator(int[] intarr) { this.intArr = intarr; Cursor = -1; }
및
MoveNext
메서드를Reset
구현합니다. 이렇게 하려면 생성자 다음에 다음 코드를 붙여넣습니다.void IEnumerator.Reset() { Cursor = -1; } bool IEnumerator.MoveNext() { if (Cursor < intArr.Length) Cursor++; return(!(Cursor == intArr.Length)); }
Reset
를Cursor
-1 로 설정하고MoveNext
를Cursor
다음 요소로 이동합니다.MoveNext
성공하면 True 를 반환합니다.가
Current
가리키는 항목을 반환하는 읽기 전용 속성을 구현합니다Cursor
. 이Cursor
-1이면 를 생성합니다InvalidOperationException
. 메서드 다음에 다음 코드를 붙여넣습니다MoveNext
.object IEnumerator.Current { get { if((Cursor < 0) || (Cursor == intArr.Length)) throw new InvalidOperationException(); return intArr[Cursor]; } }
각각에 를 사용하여 사용자 지정 컬렉션을 반복합니다.
Form1.cs디자인 탭에서 단추를 폼으로 끕니다.
단추를 두 번 클릭하고 단추의 이벤트에 다음 샘플 코드를
Click
추가합니다.CustomCollection MyCol = new CustomCollection(); foreach (object MyObj in MyCol) MessageBox.Show(MyObj.ToString());
F5 키를 눌러 애플리케이션을 실행한 다음, 단추를 클릭합니다.
참고
메시지 상자에는 사용자 지정 컬렉션의 항목이 표시됩니다.
어떻게 작동하나요? 각 호출에 대 한 GetEnumerator
개체를 만드는 Enumerator
메서드를 호출 하 고 첫 번째 항목으로 설정 Cursor
하는 메서드를 호출 MoveNext
합니다. 그런 다음 현재 속성에 액세스하여 에서 MyObj
항목을 가져옵니다. False를 반환할 때까지 MoveNext
반복됩니다.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기