Прочитать на английском

Поделиться через


ComponentCollection Класс

Определение

Предоставляет доступный только для чтения контейнер для коллекции объектов IComponent.

public class ComponentCollection : System.Collections.ReadOnlyCollectionBase
public class ComponentCollection
[System.Runtime.InteropServices.ComVisible(true)]
public class ComponentCollection : System.Collections.ReadOnlyCollectionBase
Наследование
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);
        }
    }
}

Комментарии

Эта коллекция наследуется от ReadOnlyCollectionBase. Единственный способ добавить IComponent объекты в эту коллекцию — использовать конструктор класса.

Эта коллекция предоставляет два свойства индексатора: индексатор строк и целочисленный индексатор. Свойство индексатора строк возвращает компонент в коллекции по имени, если Site свойство компонента в коллекции не null равно и 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 в совместимый одномерный массив 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 Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

См. также раздел