CA1035 : Les implémentations ICollection possèdent des membres fortement typés
Élément | Valeur |
---|---|
ID de la règle | CA1035 |
Category | Microsoft.Design |
Modification avec rupture | Rupture |
Cause
Un type public ou protégé implémente System.Collections.ICollection, mais ne fournit pas de méthode fortement typée pour System.Collections.ICollection.CopyTo. La version fortement typée de CopyTo doit accepter deux paramètres et ne peut pas avoir un System.Array ou un tableau de System.Object comme premier paramètre.
Notes
Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.
Description de la règle
Cette règle nécessite que les implémentations ICollection fournissent des membres fortement typés, afin que les utilisateurs ne soient pas tenus de caster des arguments en type Object quand ils utilisent les fonctionnalités fournies par l’interface. Cette règle suppose que le type qui implémente ICollection procède ainsi pour gérer une collection d’instances d’un type plus fort que Object.
ICollection implémente l'interface System.Collections.IEnumerable. Si les objets de la collection étendent System.ValueType, vous devez fournir un membre fortement typé pour GetEnumerator, afin d’éviter la baisse des performances provoquée par le boxing. Cela n’est pas obligatoire lorsque les objets de la collection sont de type référence.
Pour implémenter une version fortement typée d’un membre d’interface, implémentez les membres de l’interface explicitement à l’aide de noms au format InterfaceName.InterfaceMemberName
, comme CopyToexemple. Les membres d’interface explicites utilisent les types de données déclarés par l’interface. Implémentez les membres fortement typés avec le nom du membre d’interface, par exemple, CopyTo. Déclarez les membres fortement typés comme étant publics, et déclarez les paramètres et les valeurs de retour comme étant du type fort géré par la collection. Les types forts remplacent les types plus faibles comme Object et Array qui sont déclarés par l’interface.
Comment corriger les violations
Pour corriger une violation de cette règle, implémentez explicitement le membre d’interface (déclarez-la comme CopyTo). Ajoutez le membre public fortement typé, déclaré comme CopyTo
, et faites-lui prendre un tableau fortement typé comme premier paramètre.
Quand supprimer les avertissements
Supprimez un avertissement de cette règle si vous implémentez une nouvelle collection basée sur des objets, comme un arbre binaire, où les types qui étendent la nouvelle collection déterminent le type fort. Ces types doivent respecter cette règle et exposer des membres fortement typés.
Exemple
L’exemple suivant illustre la façon correcte d’implémenter 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();
}
}
}
Règles associées
CA1038 : Les énumérateurs doivent être fortement typés
CA1039 : Les listes sont fortement typées
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour