ComponentCollection 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
IComponent 개체 컬렉션용 읽기 전용 컨테이너를 제공합니다.
public ref class ComponentCollection : System::Collections::ReadOnlyCollectionBase
public ref class ComponentCollection
public class ComponentCollection : System.Collections.ReadOnlyCollectionBase
public class ComponentCollection
[System.Runtime.InteropServices.ComVisible(true)]
public class ComponentCollection : System.Collections.ReadOnlyCollectionBase
type ComponentCollection = class
inherit ReadOnlyCollectionBase
type ComponentCollection = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type ComponentCollection = class
inherit ReadOnlyCollectionBase
Public Class ComponentCollection
Inherits ReadOnlyCollectionBase
Public Class ComponentCollection
- 상속
- 상속
-
ComponentCollection
- 특성
예제
다음 코드 예제를 사용 ComponentCollection 하는 방법에 설명 합니다 사용자 지정 BookComponent
개체의 컬렉션을 열거 합니다.
//This code segment implements the IContainer interface. The code segment
//containing the implementation of ISite and IComponent can be found in the documentation
//for those interfaces.
//Implement the LibraryContainer using the IContainer interface.
class LibraryContainer : IContainer
{
private ArrayList m_bookList;
public LibraryContainer()
{
m_bookList = new ArrayList();
}
public virtual void Add(IComponent book)
{
//The book will be added without creation of the ISite object.
m_bookList.Add(book);
}
public virtual void Add(IComponent book, string ISNDNNum)
{
for(int i =0; i < m_bookList.Count; ++i)
{
IComponent curObj = (IComponent)m_bookList[i];
if(curObj.Site != null)
{
if(curObj.Site.Name.Equals(ISNDNNum))
throw new ArgumentException("The ISBN number already exists in the container");
}
}
ISBNSite data = new ISBNSite(this, book);
data.Name = ISNDNNum;
book.Site = data;
m_bookList.Add(book);
}
public virtual void Remove(IComponent book)
{
for(int i =0; i < m_bookList.Count; ++i)
{
if(book.Equals(m_bookList[i]))
{
m_bookList.RemoveAt(i);
break;
}
}
}
public ComponentCollection Components
{
get
{
IComponent[] datalist = new BookComponent[m_bookList.Count];
m_bookList.CopyTo(datalist);
return new ComponentCollection(datalist);
}
}
public virtual void Dispose()
{
for(int i =0; i < m_bookList.Count; ++i)
{
IComponent curObj = (IComponent)m_bookList[i];
curObj.Dispose();
}
m_bookList.Clear();
}
static void Main(string[] args)
{
LibraryContainer cntrExmpl = new LibraryContainer();
try
{
BookComponent book1 = new BookComponent("Wizard's First Rule", "Terry Gooodkind");
cntrExmpl.Add(book1, "0812548051");
BookComponent book2 = new BookComponent("Stone of Tears", "Terry Gooodkind");
cntrExmpl.Add(book2, "0812548094");
BookComponent book3 = new BookComponent("Blood of the Fold", "Terry Gooodkind");
cntrExmpl.Add(book3, "0812551478");
BookComponent book4 = new BookComponent("The Soul of the Fire", "Terry Gooodkind");
//This will generate exception because the ISBN already exists in the container.
cntrExmpl.Add(book4, "0812551478");
}
catch (ArgumentException e)
{
Console.WriteLine("Unable to add books: " + e.Message);
}
ComponentCollection datalist =cntrExmpl.Components;
IEnumerator denum = datalist.GetEnumerator();
while(denum.MoveNext())
{
BookComponent cmp = (BookComponent)denum.Current;
Console.WriteLine("Book Title: " + cmp.Title);
Console.WriteLine("Book Author: " + cmp.Author);
Console.WriteLine("Book ISBN: " + cmp.Site.Name);
}
}
}
'This code segment implements the IContainer interface. The code segment
'containing the implementation of ISite and IComponent can be found in the documentation
'for those interfaces.
'Implement the LibraryContainer using the IContainer interface.
Class LibraryContainer
Implements IContainer
Private m_bookList As ArrayList
Public Sub New()
m_bookList = New ArrayList()
End Sub
Public Sub Add(ByVal book As IComponent) Implements IContainer.Add
'The book will be added without creation of the ISite object.
m_bookList.Add(book)
End Sub
Public Sub Add(ByVal book As IComponent, ByVal ISNDNNum As String) Implements IContainer.Add
Dim i As Integer
Dim curObj As IComponent
For i = 0 To m_bookList.Count - 1
curObj = CType(m_bookList(i), IComponent)
If curObj.Site IsNot Nothing Then
If (curObj.Site.Name.Equals(ISNDNNum)) Then
Throw New ArgumentException("The ISBN number already exists in the container")
End If
End If
Next i
Dim data As ISBNSite = New ISBNSite(Me, book)
data.Name = ISNDNNum
book.Site = data
m_bookList.Add(book)
End Sub
Public Sub Remove(ByVal book As IComponent) Implements IContainer.Remove
Dim i As Integer
Dim curComp As BookComponent = CType(book, BookComponent)
For i = 0 To m_bookList.Count - 1
If (curComp.Equals(m_bookList(i)) = True) Then
m_bookList.RemoveAt(i)
Exit For
End If
Next i
End Sub
Public ReadOnly Property Components() As ComponentCollection Implements IContainer.Components
Get
Dim datalist(m_bookList.Count - 1) As IComponent
m_bookList.CopyTo(datalist)
Return New ComponentCollection(datalist)
End Get
End Property
Public Overridable Sub Dispose() Implements IDisposable.Dispose
Dim i As Integer
For i = 0 To m_bookList.Count - 1
Dim curObj As IComponent = CType(m_bookList(i), IComponent)
curObj.Dispose()
Next i
m_bookList.Clear()
End Sub
Public Shared Sub Main()
Dim cntrExmpl As LibraryContainer = New LibraryContainer()
Try
Dim book1 As BookComponent = New BookComponent("Wizard's First Rule", "Terry Gooodkind")
cntrExmpl.Add(book1, "0812548051")
Dim book2 As BookComponent = New BookComponent("Stone of Tears", "Terry Gooodkind")
cntrExmpl.Add(book2, "0812548094")
Dim book3 As BookComponent = New BookComponent("Blood of the Fold", "Terry Gooodkind")
cntrExmpl.Add(book3, "0812551478")
Dim book4 As BookComponent = New BookComponent("The Soul of the Fire", "Terry Gooodkind")
'This will generate an exception, because the ISBN already exists in the container.
cntrExmpl.Add(book4, "0812551478")
Catch e As ArgumentException
Console.WriteLine("Unable to add books: " + e.Message)
End Try
Dim datalist As ComponentCollection = cntrExmpl.Components
Dim denum As IEnumerator = datalist.GetEnumerator()
While (denum.MoveNext())
Dim cmp As BookComponent = CType(denum.Current, BookComponent)
Console.WriteLine("Book Title: " + cmp.Title)
Console.WriteLine("Book Author: " + cmp.Author)
Console.WriteLine("Book ISBN: " + cmp.Site.Name)
End While
End Sub
End Class
설명
이 컬렉션은 에서 ReadOnlyCollectionBase상속됩니다. 이 컬렉션에 개체를 추가하는 IComponent 유일한 방법은 클래스 생성자를 사용하는 것입니다.
이 컬렉션은 문자열 인덱서와 정수 인덱서라는 두 개의 인덱서 속성을 제공합니다. 문자열 인덱서 속성은 컬렉션에 있는 구성 요소의 속성이 이 아니 null
고 구성 요소의 속성 Site 이 지정된 문자열과 Name 일치하는 경우 Site 이름으로 컬렉션의 구성 요소를 반환합니다. 정수 인덱서 속성은 지정된 컬렉션 인덱스에서 를 반환 IComponent 합니다. 메서드는 CopyTo 컬렉션의 내용을 지정된 배열에 복사하여 지정된 인덱스에서 배열에 쓰기 시작합니다.
생성자
ComponentCollection(IComponent[]) |
지정된 구성 요소 배열을 사용하여 ComponentCollection 클래스의 새 인스턴스를 초기화합니다. |
속성
Count |
ReadOnlyCollectionBase 인스턴스에 포함된 요소 수를 가져옵니다. (다음에서 상속됨 ReadOnlyCollectionBase) |
InnerList |
ReadOnlyCollectionBase 인스턴스에 포함된 요소의 목록을 가져옵니다. (다음에서 상속됨 ReadOnlyCollectionBase) |
Item[Int32] |
컬렉션에서 지정된 컬렉션 인덱스 위치에 있는 Component를 가져옵니다. |
Item[String] |
컬렉션에서 지정된 이름과 일치하는 모든 구성 요소를 가져옵니다. |
메서드
CopyTo(IComponent[], Int32) |
전체 컬렉션을 지정된 배열 인덱스에서부터 쓰기 시작하여 배열에 복사합니다. |
Equals(Object) |
지정된 개체가 현재 개체와 같은지 확인합니다. (다음에서 상속됨 Object) |
GetEnumerator() |
ReadOnlyCollectionBase 인스턴스를 반복하는 열거자를 반환합니다. (다음에서 상속됨 ReadOnlyCollectionBase) |
GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
GetType() |
현재 인스턴스의 Type을 가져옵니다. (다음에서 상속됨 Object) |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
명시적 인터페이스 구현
ICollection.CopyTo(Array, Int32) |
대상 배열의 지정된 인덱스에서 시작하여 전체 ReadOnlyCollectionBase을 호환되는 1차원 Array에 복사합니다. (다음에서 상속됨 ReadOnlyCollectionBase) |
ICollection.IsSynchronized |
ReadOnlyCollectionBase 개체에 대한 액세스가 동기화되어 스레드로부터 안전하게 보호되는지 여부를 나타내는 값을 가져옵니다. (다음에서 상속됨 ReadOnlyCollectionBase) |
ICollection.SyncRoot |
ReadOnlyCollectionBase 개체에 대한 액세스를 동기화하는 데 사용할 수 있는 개체를 가져옵니다. (다음에서 상속됨 ReadOnlyCollectionBase) |
확장 메서드
Cast<TResult>(IEnumerable) |
IEnumerable의 요소를 지정된 형식으로 캐스팅합니다. |
OfType<TResult>(IEnumerable) |
지정된 형식에 따라 IEnumerable의 요소를 필터링합니다. |
AsParallel(IEnumerable) |
쿼리를 병렬화할 수 있도록 합니다. |
AsQueryable(IEnumerable) |
IEnumerable을 IQueryable로 변환합니다. |
적용 대상
추가 정보
.NET