Como implementar coleções personalizadas no Visual translation from VPE for Csharp

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 307484
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 306961.
Para uma versão deste artigo do Microsoft Visual C++. NET, consulte 312514.

Este artigo se refere ao seguinte namespace Microsoft .NET Framework Class Library:
  • System.Collection

NESTA TAREFA

Sumário
Este artigo passo a passo mostra como implementar uma coleção personalizada Visual translation from VPE for Csharp. As bibliotecas de classe base do .NET Framework oferecem uma definição formal de uma coleção: a interface System.Collections.ICollection .

back to the top

Implementando a interface ICollection em uma classe personalizada

A interface ICollection herda a interface IEnumerable . A interface ICollection define um método CopyTo e três propriedades somente leitura: IsSynchronized , SyncRoot e Count . ICollection herda o método GetEnumerator a interface IEnumerable . Uma classe de coleção personalizada deve implementar a interface ICollection .

Para implementar a interface ICollection , execute estas etapas:
  1. Translation from VPE for Csharp Visual .NET ou Visual translation from VPE for Csharp 2005, crie um aplicativo do Windows.
  2. No Solution Explorer, clique com o botão direito do mouse o nome do projeto, aponte para Add e, em seguida, clique em Add Class para adicionar um módulo de classe chamado CustomCollection .
  3. Adicione o seguinte código de exemplo para o início do módulo de classe para importar o namespace System.Collection :
    using System.Collections;					
  4. Substituir qualquer outro código no módulo com o seguinte código de exemplo:
     public class CustomCollection : ICollection{    private int[] intArr = {1,5,9};    private int Ct;    public CustomCollection()    {			Ct=3;    }}						
    para simplificar, a classe CustomCollection mantém uma matriz com três itens de inteiro e uma variável de contagem.
  5. Implemente o método CopyTo , que usa uma matriz de inteiros e um índice como parâmetros. Esse método copia os itens em uma coleção para a matriz começando o índice que é passado. Para implementar esse método, cole o seguinte código após o construtor público CustomCollection :
    void ICollection.CopyTo(Array myArr, int index){			    foreach (int i in intArr)    {	myArr.SetValue(i,index);	index = index+1;    }}					
  6. Implemente o método GetEnumerator , que é herdado pela interface ICollection de IEnumerable. O método GetEnumerator retorna um objeto enumerador que pode iterar em uma coleção. Cole o seguinte código exemplo após o método CopyTo :
    IEnumerator IEnumerable.GetEnumerator(){    return new Enumerator(intArr);			  }					
  7. Para implementar as três propriedades somente leitura, cole o seguinte código após o método GetEnumerator :
    // The IsSynchronized Boolean property returns True if the // collection is designed to be thread safe; otherwise, it returns False.bool ICollection.IsSynchronized{    get    {         return false;    }}// The SyncRoot property returns an object, which is used for synchronizing // the collection. This returns the instance of the object or returns the // SyncRoot of other collections if the collection contains other collections.// object ICollection.SyncRoot{    get    {	return this;    }}// The Count read-only property returns the number // of items in the collection.int ICollection.Count{    get    {	return Ct;    }}					
back to the top

Implementando um objeto enumerator para o método GetEnumerator

Esta seção mostra como criar uma classe do enumerador que pode iterar CustomCollection .
  1. Cole o seguinte código exemplo após a instrução End Class em seu módulo de classe:
    public class Enumerator : IEnumerator{    private int[] intArr;     private int Cursor;}						
    Declare a matriz de inteiros particular intArr para manter os elementos da classe CustomCollection quando o método GetEnumerator é chamado. O membro de campo de cursor contém a posição atual ao enumerar.
  2. Adicionar um construtor com intArr como um parâmetro e defina o local intArr para isso. Cole o seguinte código de exemplo após a declaração do campo de membro:
    public Enumerator(int[] intarr){    this.intArr = intarr;    Cursor = -1;}
  3. Implemente os métodos MoveNext e Redefinir . Para fazer isso, cole o seguinte código após o construtor:
    void IEnumerator.Reset(){    Cursor = -1;}bool IEnumerator.MoveNext(){    if (Cursor < intArr.Length)    Cursor++;    return(!(Cursor == intArr.Length));}						
    Redefinir define o cursor como -1 e MoveNext move o cursor para o próximo elemento. MoveNext retorna True se for bem-sucedido.
  4. Implemente a propriedade atual de somente leitura que retorna o item apontado pelo cursor. Se o cursor for -1, ele gera um InvalidOperationException . Cole o seguinte código após o método MoveNext :
    object IEnumerator.Current{    get    {        if((Cursor < 0) || (Cursor == intArr.Length))	throw new InvalidOperationException();	return intArr[Cursor];    }}					
back to the top

Usando for each para iterar na coleção personalizada

  1. No Form1.cs, na guia Design , arraste um botão ao formulário.
  2. Clique duas vezes no botão e adicione o código de exemplo a seguir ao evento Click do botão:
        CustomCollection MyCol = new CustomCollection();		    foreach (object MyObj in MyCol)	MessageBox.Show(MyObj.ToString());					
  3. Pressione F5 para executar o aplicativo e, em seguida, clique no botão. Observe que uma caixa de mensagem exibe os itens na coleção personalizada.
Como isso funciona? para cada chama o método GetEnumerator para criar o objeto Enumerator e chama o método MoveNext para definir o cursor para o primeiro item. Em seguida, a propriedade Current é acessada para obter o item no MyObj. Isso é repetido até que MoveNext retornará False.

back to the top

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 307484 - Última Revisão: 12/11/2006 21:04:44 - Revisão: 1.4

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# 2005

  • kbmt kbhowtomaster KB307484 KbMtpt
Comentários