public interface IContainer : IDisposable
|
//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); } } }
Components | Read-only Gets all the components in the IContainer. |
Add | Overloaded:Add(IComponent component) Adds the specified IComponent to the IContainer at the end of the list. |
Add | Overloaded:Add(IComponent component, string name) Adds the specified IComponent to the IContainer at the end of the list, and assigns a name to the component. |
Remove | Removes a component from the IContainer. |
Hierarchy:
ComponentCollection Components {get;}
|
void Add( |
component
void Add( |
component
name
null that leaves the component unnamed.
-or-null that leaves the component unnamed.
void Remove( |
component