Compartilhar via


CA1035: as implementações de ICollection têm membros fortemente tipados

TypeName

ICollectionImplementationsHaveStronglyTypedMembers

CheckId

CA1035

Categoria

Microsoft.Design

Alteração Significativa

Quebra

Causa

Um público ou um implementa protegidos ICollection do tipo mas não oferecem um método com rigidez para ICollection.CopyTo.A versão com rigidez de CopyTo deve aceitar dois parâmetros e não pode ter Array ou uma matriz de Object como o primeiro parâmetro.

Descrição da Regra

Essa regra requer implementações de ICollection fornecer membros fortemente tipados de forma que usuários não sejam necessários lançar argumentos para o tipo de Object quando usarem a funcionalidade fornecida pela interface.Esta regra assumirá que o tipo que implementa ICollection fazer isso para gerenciar uma coleção de instâncias de um tipo que é mais segura que Object.

ICollection implementa a interface de IEnumerable .Se os objetos da coleção ValueTypeestendem, você deve fornecer um membro com rigidez para que GetEnumerator evite a redução de desempenho que é causado encaixotando.Isso não é necessário quando os objetos da coleção é um tipo de referência.

Para implementar uma versão com rigidez de um membro da interface, implemente os membros da interface explicitamente usando nomes no formulário InterfaceName.InterfaceMemberName, como CopyTo.Os membros explícitos da interface usam os tipos de dados que são declaradas pela interface.Implementar os membros fortemente tipados usando o nome do membro da interface, como CopyTo.Declare os membros fortemente tipados como o utilitário, e declarar os parâmetros e valores de retorno do tipo forte que é gerenciado pela coleção.Os tipos fortes substituem os tipos mais importantes como Object e Array que foram declarados pela interface.

Como Corrigir Violações

Para corrigir uma violação desta regra, implemente o membro da interface explicitamente (a declarar como CopyTo).Adicionar membro com rigidez do utilitário, declarado como CopyTo, e mande-o executar uma matriz com rigidez como o primeiro parâmetro.

Quando Suprimir Alertas

Suprima um aviso dessa regra se você implementa uma nova coleção de objetos com base, como uma árvore binária, onde os tipos que estendem a nova coleção determinem o tipo forte.Esses tipos devem estar de acordo com essa regra e expor os membros fortemente tipados.

Exemplo

O exemplo a seguir demonstra a forma correta de implementar ICollection.

using System;
using System.Collections;
namespace DesignLibrary
{

   public class ExceptionCollection : ICollection
   {   
      private ArrayList data;

      ExceptionCollection()
      {
         data = new ArrayList();
      }

      // Provide the explicit interface member for ICollection. 
      void ICollection.CopyTo(Array array, int index)
      {
         data.CopyTo(array, index);
      }

      // Provide the strongly typed member for ICollection. 
      public void CopyTo(Exception[] array, int index)
      {
         ((ICollection)this).CopyTo(array, index);
      }

      // Implement the rest of the ICollection members. 
      public int Count
      {
        get 
        {
           return data.Count;
        }
      }

      public object SyncRoot
      {
         get 
        {
           return this; 
        }
      }

      public bool IsSynchronized
      {
         get 
         {
            return false; 
         }
      }

      // The IEnumerable interface is implemented by ICollection. 
      // Because the type underlying this collection is a reference type, 
      // you do not need a strongly typed version of GetEnumerator. 

      public IEnumerator GetEnumerator()
      {
         return data.GetEnumerator();
      }
   }
}

Regras Relacionadas

CA1038: os enumeradores devem ser fortemente tipados

CA1039: as listas são fortemente tipadas

Consulte também

Referência

Array

IEnumerable

ICollection

Object