Compartilhar via


Implementações de ICollection tem rigidez de tipos membros

TypeName

ICollectionImplementationsHaveStronglyTypedMembers

CheckId

CA1035

Category (Categoria)

Microsoft.Design

Quebrando alterar

Quebrando

Causa

Um tipo 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 de CopyTo deve aceitar dois parâmetros e não pode ter um System.Array ou uma matriz de System.Object sistema autônomo seu primeiro parâmetro.

Descrição da regra

Esta regra requer ICollection implementações fornecer altamente digitado membros para que os usuários não precisem converter argumentos para o Object Digite ao usar a funcionalidade fornecida pela interface. Esta regra pressupõe que o tipo que implementa ICollection Para fazer isso para gerenciar uma coleção de instâncias de um tipo que está mais forte do que Object.

ICollection implementa 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 perda de desempenho causado pela conversão boxing; isso não é necessário se objetos da coleção estiverem um tipo de referência.

Para implementar uma versão de um membro da interface com rigidez de tipos, implemente sistema autônomo membros de interface explicitamente usando nomes no formulário InterfaceName.InterfaceMemberName, sistema autônomo CopyTo. Os membros de interface explícita usam os tipos de dados declarados pela interface.Implemente sistema autônomo membros fortemente tipados usando o nome de membro de interface, sistema autônomo CopyTo. Declarar sistema autônomo membros fortemente tipados sistema autônomo public e declarar parâmetros e retornar valores a serem do tipo forte gerenciado por coleção.sistema autônomo tipos de alta seguras substituir tipos mais fracos, sistema autônomo Object e Array declarado pela interface.

Como corrigir violações

Para corrigir uma violação dessa regra, implementar o membro de interface explicitamente (declará-lo sistema autônomo CopyTo). Adicionar o membro com rigidez de tipos público, declarado sistema autônomo CopyTo, e ainda levar a uma matriz fortemente tipada sistema autônomo seu primeiro parâmetro.

Quando suprimir avisos

Eliminar um aviso essa regra ao implementar uma nova coleção com base em objeto, sistema autônomo uma árvore binária, onde tipos estendem a nova coleção determinam o tipo de alta segurança.Esses tipos devem estar em conformidade com essa regra e exponha 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

Enumeradores devem ser fortemente tipados

Listas são fortemente tipadas

Consulte também

Referência

System.Array

System.Collections.IEnumerable

System.Collections.ICollection

System.Object