Compartilhar via


ComponentCollection Classe

Definição

Fornece um contêiner somente leitura para uma coleção de IComponent objetos.

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
Herança
ComponentCollection
Herança
ComponentCollection
Atributos

Exemplos

O exemplo de código a seguir demonstra como usar um ComponentCollection para enumerar uma coleção de objetos personalizados 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
{
    readonly ArrayList m_bookList = [];

    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");
                }
            }
        }

        book.Site = new ISBNSite(this, book) { Name = ISNDNNum };
        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()
    {
        LibraryContainer cntrExmpl = new();

        try
        {
            BookComponent book1 = new("Wizard's First Rule", "Terry Gooodkind");
            cntrExmpl.Add(book1, "0812548051");
            BookComponent book2 = new("Stone of Tears", "Terry Gooodkind");
            cntrExmpl.Add(book2, "0812548094");
            BookComponent book3 = new("Blood of the Fold", "Terry Gooodkind");
            cntrExmpl.Add(book3, "0812551478");
            BookComponent book4 = new("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

Comentários

Esta coleção herda de ReadOnlyCollectionBase. A única maneira de adicionar IComponent objetos a essa coleção é usar o construtor de classe.

Essa coleção fornece duas propriedades de indexador, um indexador de cadeia de caracteres e um indexador inteiro. A propriedade do indexador de cadeia de caracteres retornará um componente na coleção pelo nome se a Site propriedade de um componente na coleção não null for e a NameSite propriedade da propriedade do componente corresponder à cadeia de caracteres especificada. A propriedade do indexador inteiro retorna o IComponent índice de coleção especificado. O CopyTo método copia o conteúdo da coleção para uma matriz especificada, começando a gravar na matriz no índice especificado.

Construtores

Nome Description
ComponentCollection(IComponent[])

Inicializa uma nova instância da ComponentCollection classe usando a matriz de componentes especificada.

Propriedades

Nome Description
Count

Obtém o número de elementos contidos na ReadOnlyCollectionBase instância.

(Herdado de ReadOnlyCollectionBase)
InnerList

Obtém a lista de elementos contidos na ReadOnlyCollectionBase instância.

(Herdado de ReadOnlyCollectionBase)
Item[Int32]

Obtém a Component coleção no índice de coleção especificado.

Item[String]

Obtém qualquer componente na coleção que corresponda ao nome especificado.

Métodos

Nome Description
CopyTo(IComponent[], Int32)

Copia toda a coleção para uma matriz, começando a gravar no índice de matriz especificado.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetEnumerator()

Retorna um enumerador que itera por meio da ReadOnlyCollectionBase instância.

(Herdado de ReadOnlyCollectionBase)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

Nome Description
ICollection.CopyTo(Array, Int32)

Copia o todo ReadOnlyCollectionBase para um unidimensional Arraycompatível, começando no índice especificado da matriz de destino.

(Herdado de ReadOnlyCollectionBase)
ICollection.IsSynchronized

Obtém um valor que indica se o acesso a um ReadOnlyCollectionBase objeto é sincronizado (thread safe).

(Herdado de ReadOnlyCollectionBase)
ICollection.SyncRoot

Obtém um objeto que pode ser usado para sincronizar o acesso a um ReadOnlyCollectionBase objeto.

(Herdado de ReadOnlyCollectionBase)

Métodos de Extensão

Nome Description
AsParallel(IEnumerable)

Habilita a paralelização de uma consulta.

AsQueryable(IEnumerable)

Converte um IEnumerable em um IQueryable.

Cast<TResult>(IEnumerable)

Converte os elementos de um IEnumerable para o tipo especificado.

OfType<TResult>(IEnumerable)

Filtra os elementos de um IEnumerable com base em um tipo especificado.

Aplica-se a

Confira também