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
Consulte também
Referência
System.Collections.IEnumerable