Compartilhar via


CA1035: ICollection implementações com rigidez de tipos membros

TypeName

ICollectionImplementationsHaveStronglyTypedMembers

CheckId

CA1035

<strong>Categoria</strong>

Microsoft.design

Alteração significativa

Quebrando

Causa

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

Descrição da regra

Esta regra requer ICollection implementações para fornecer altamente digitado membros para que os usuários não precisam converter argumentos para o Object digite quando usarem a funcionalidade fornecida pela interface.Esta regra pressupõe que o tipo que implementa ICollection faz, portanto, para gerenciar uma coleção de instâncias de um tipo que é mais forte que Object.

ICollectionimplementa o System.Collections.IEnumerable interface.Se os objetos na coleção estendem System.ValueType, você deve fornecer um membro com rigidez de tipos para GetEnumerator para evitar a diminuição no desempenho causado pela conversão boxing.Isso não é necessário quando os objetos da coleção são um tipo de referência.

Para implementar uma versão com rigidez de tipos de um membro da interface, implemente os membros de interface explicitamente por meio de nomes no formulário InterfaceName.InterfaceMemberName, como CopyTo.Os membros de interface explícita usar os tipos de dados que são declarados pela interface.Implementar os membros fortemente tipados usando o nome do membro de interface, como CopyTo.Declarar os membros com rigidez de tipos como public e declarar parâmetros e retornar valores a serem do tipo de alta segurança que é gerenciado pela coleção.Os tipos de alta seguras substituir os tipos mais fracos como Object e Array que são declaradas pela interface.

Como corrigir violações

Para corrigir uma violação desta regra, implementar o membro de interface explicitamente (declará-lo como CopyTo).Adicionar o membro com rigidez de tipos público, declarado como CopyTo, e tê-lo a tomar uma matriz fortemente tipada como seu primeiro parâmetro.

Quando suprimir avisos

Elimina um aviso esta regra, se você implementar uma nova coleção baseada em objeto, como, por exemplo, uma árvore binária, onde os tipos de que se estendem a nova coleção determinam o tipo de alta segurança.Esses tipos devem cumprir essa regra e expor membros fortemente tipados.

Exemplo

O exemplo a seguir demonstra a maneira 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: Enumeradores devem ser fortemente tipados

CA1039: Listas são fortemente tipadas

Consulte também

Referência

System.Array

System.Collections.IEnumerable

System.Collections.ICollection

System.Object