Export (0) Print
Expand All

ComponentCollection Class

Provides a read-only container for a collection of IComponent objects.

Namespace: System.ComponentModel
Assembly: System (in system.dll)

[ComVisibleAttribute(true)] 
public class ComponentCollection : ReadOnlyCollectionBase
/** @attribute ComVisibleAttribute(true) */ 
public class ComponentCollection extends ReadOnlyCollectionBase
ComVisibleAttribute(true) 
public class ComponentCollection extends ReadOnlyCollectionBase
Not applicable.

This collection inherits from ReadOnlyCollectionBase. The only way to add IComponent objects to this collection is to use the class constructor.

This collection provides two indexer properties, a string indexer and an integer indexer. The string indexer property returns a component in the collection by name if the Site property of a component in the collection is not a null reference (Nothing in Visual Basic) and the Name property of the Site property of the component matches the specified string. The integer indexer property returns the IComponent at the specified collection index. The CopyTo method copies the contents of the collection to a specified array, beginning writing to the array at the specified index.

NoteNote:

The HostProtectionAttribute attribute applied to this class has the following Resources property value: Synchronization. The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser). For more information, see the HostProtectionAttribute class or SQL Server Programming and Host Protection Attributes.

The following code example demonstrates how to use a ComponentCollection to enumerate a collection of custom BookComponent objects.

//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

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 98, Windows Server 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

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0, 2.0, 1.1, 1.0

Community Additions

ADD
Show:
© 2014 Microsoft