ComponentCollection 클래스
IComponent 개체의 컬렉션에 대한 읽기 전용 컨테이너를 제공합니다.
네임스페이스: System.ComponentModel
어셈블리: System(system.dll)
구문
‘선언
<ComVisibleAttribute(True)> _
Public Class ComponentCollection
Inherits ReadOnlyCollectionBase
‘사용 방법
Dim instance As ComponentCollection
[ComVisibleAttribute(true)]
public class ComponentCollection : ReadOnlyCollectionBase
[ComVisibleAttribute(true)]
public ref class ComponentCollection : public ReadOnlyCollectionBase
/** @attribute ComVisibleAttribute(true) */
public class ComponentCollection extends ReadOnlyCollectionBase
ComVisibleAttribute(true)
public class ComponentCollection extends ReadOnlyCollectionBase
설명
이 컬렉션은 ReadOnlyCollectionBase에서 상속됩니다. 이 컬렉션에 IComponent 개체를 추가하는 유일한 방법은 클래스 생성자를 사용하는 것입니다.
이 컬렉션은 두 개의 인덱서 속성, 문자열 인덱서와 정수 인덱서를 제공합니다. 문자열 인덱서 속성은 컬렉션에 있는 구성 요소의 Site 속성이 Null 참조(Visual Basic의 경우 Nothing)이 아니고 구성 요소에 대한 Site 속성의 Name 속성이 지정된 문자열과 일치하는 경우 이름별로 컬렉션에 있는 구성 요소를 반환합니다. 정수 인덱서 속성은 지정된 컬렉션 인덱스에 있는 IComponent를 반환합니다. CopyTo 메서드는 컬렉션의 내용을 지정된 인덱스에서부터 배열에 쓰기 시작하여 해당 배열에 복사합니다.
참고
이 클래스에 적용되는 HostProtectionAttribute 특성의 Resources 속성 값은 Synchronization입니다. HostProtectionAttribute는 대개 아이콘을 두 번 클릭하거나, 명령을 입력하거나, 브라우저에서 URL을 입력하여 시작되는 데스크톱 응용 프로그램에 영향을 미치지 않습니다. 자세한 내용은 HostProtectionAttribute 클래스나 SQL Server 프로그래밍 및 호스트 보호 특성을 참조하십시오.
예제
다음 코드 예제에서는 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
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 Not curObj.Site Is Nothing Then
If (curObj.Site.Name.Equals(ISNDNNum)) Then
Throw New SystemException("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 SystemException
Console.WriteLine("Error description: " + 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
//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 SystemException("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(SystemException e)
{
Console.WriteLine("Error description: " + 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 ArrayList mBookList;
public LibraryContainer()
{
mBookList = new ArrayList();
} //LibraryContainer
public void Add(IComponent book)
{
// The book will be added without creation of the ISite object.
mBookList.Add(book);
} //Add
public void Add(IComponent book, String isndNNum) throws SystemException
{
for (int i = 0; i < mBookList.get_Count(); ++i) {
IComponent curObj = (IComponent)mBookList.get_Item(i);
if (curObj.get_Site() != null) {
if (curObj.get_Site().get_Name().Equals(isndNNum)) {
throw new SystemException(
"The ISBN number already exists in the container");
}
}
}
ISBNSite data = new ISBNSite(this, book);
data.set_Name(isndNNum);
book.set_Site(data);
mBookList.Add(book);
} //Add
public void Remove(IComponent book)
{
for (int i = 0; i < mBookList.get_Count(); ++i) {
if (book.Equals(mBookList.get_Item(i))) {
mBookList.RemoveAt(i);
break;
}
}
} //Remove
/** @property
*/
public ComponentCollection get_Components()
{
IComponent dataList[] = new BookComponent[mBookList.get_Count()];
mBookList.CopyTo(dataList);
return new ComponentCollection(dataList);
} //get_Components
public void Dispose()
{
for (int i = 0; i < mBookList.get_Count(); ++i) {
IComponent curObj = (IComponent)mBookList.get_Item(i);
curObj.Dispose();
}
mBookList.Clear();
} //Dispose
public 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 (SystemException e) {
Console.WriteLine("Error description: " + e.get_Message());
}
ComponentCollection dataList = cntrExmpl.get_Components();
IEnumerator denum = dataList.GetEnumerator();
while (denum.MoveNext()) {
BookComponent cmp = (BookComponent)denum.get_Current();
Console.WriteLine("Book Title: " + cmp.get_Title());
Console.WriteLine("Book Author: " + cmp.get_Author());
Console.WriteLine("Book ISBN: " + cmp.get_Site().get_Name());
}
} //main
} //LibraryContainer
상속 계층 구조
System.Object
System.Collections.ReadOnlyCollectionBase
System.ComponentModel.ComponentCollection
스레드로부터의 안전성
이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.
플랫폼
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.
버전 정보
.NET Framework
2.0, 1.1, 1.0에서 지원
참고 항목
참조
ComponentCollection 멤버
System.ComponentModel 네임스페이스
IComponent