Share via


CA1035: Las implementaciones de ICollection tienen miembros fuertemente tipados

Elemento Valor
RuleId CA1035
Category Microsoft.Design
Cambio importante Problemático

Causa

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

Nota

Esta regla está en desuso. Para más información, consulte Reglas en desuso.

Descripción de la regla

Esta regla requiere que las implementaciones 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 fuerte 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 GetEnumerator con el fin de evitar la disminución del rendimiento causado por la conversión boxing. Esto no es necesario 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 explícitamente los miembros de la interfaz mediante el uso de nombres con el formato InterfaceName.InterfaceMemberName, como CopyTo. Los miembros de interfaz explícitos usan los tipos de datos declarados por la interfaz. Implemente los miembros fuertemente tipados mediante el nombre del miembro de interfaz, como CopyTo. Declare los miembros fuertemente tipados como públicos y declare parámetros y valores devueltos para que sean del tipo seguro administrado por la colección. Los tipos seguros reemplazan 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 interfaz (declárelo como CopyTo). Agregue el miembro público fuertemente tipado, declarado como CopyTo y haga que tome una matriz fuertemente tipada como su primer parámetro.

Cuándo suprimir las advertencias

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

Ejemplo

En el ejemplo siguiente se 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();
      }
   }
}

CA1038: Los enumeradores deben estar fuertemente tipados

CA1039: Las listas están fuertemente tipadas

Consulte también