Compartir a través de


CA1035: Las implementaciones de ICollection tienen miembros fuertemente tipados

Nombre de tipo

ICollectionImplementationsHaveStronglyTypedMembers

Identificador de comprobación

CA1035

Categoría

Microsoft.Design

Cambio problemático

Motivo

Un tipo público o protegido implementa System.Collections.ICollection pero no proporciona un método fuertemente tipado para ICollection.CopyTo.La versión fuertemente tipada de CopyTo debe aceptar dos parámetros y no puede tener una System.Array o una matriz de System.Object como su primer parámetro.

Descripción de la regla

Esta regla requiere que las implementaciones de ICollection proporcionen miembros fuertemente tipados para que los usuarios no necesiten convertir los argumentos en el tipo Object cuando utilicen la funcionalidad proporcionada por la interfaz.Esta regla supone que el tipo que implementa ICollection lo hace para administrar una colección de instancias de un tipo que es más segura que Object.

ICollection implementa la interfaz System.Collections.IEnumerable.Si los objetos de la colección extienden System.ValueType, debe proporcionar un miembro fuertemente tipado para que GetEnumerator evite la disminución de rendimiento que se produce aplicando la conversión boxing.Esto no se requiere cuando los objetos de la colección son un tipo de referencia.

Para implementar una versión fuertemente tipada de un miembro de interfaz, implemente los miembros de interfaz utilizando explícitamente los nombres en el formulario InterfaceName.InterfaceMemberName, como CopyTo.Los miembros de la interfaz explícitos utilizan los tipos de datos declarados por la interfaz.Implemente los miembros fuertemente tipados utilizando el nombre del miembro de la interfaz, como CopyTo.Declare los miembros fuertemente tipados como públicos, y declare los parámetros y valores devueltos para que sean del tipo seguro que administra la colección.Los tipos con establecimiento inflexible reemplazan a los tipos más débiles como Object y Array declarados por la interfaz.

Cómo corregir infracciones

Para corregir una infracción de esta regla, implemente explícitamente el miembro de la interfaz (declárela como CopyTo).Agregue el miembro fuertemente tipado público, declarado como CopyTo, y pase una matriz fuertemente tipada como su primer parámetro.

Cuándo suprimir advertencias

Suprima una advertencia de esta regla si implementa una colección nueva basada en objetos, como un árbol binario, donde los tipos que extienden la nueva colección determinan el establecimiento inflexible de tipos.Estos tipos deberían cumplir esta regla y exponer los miembros fuertemente tipados.

Ejemplo

El ejemplo siguiente muestra la manera correcta 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();
      }
   }
}

Reglas relacionadas

CA1038: Los enumeradores deben estar fuertemente tipados

CA1039: Las listas están fuertemente tipadas

Vea también

Referencia

System.Array

System.Collections.IEnumerable

System.Collections.ICollection

System.Object