Udostępnij za pośrednictwem


CA1035: Implementacje ICollection mają silnie typizowane elementy członkowskie

TypeName

ICollectionImplementationsHaveStronglyTypedMembers

CheckId

CA1035

Kategoria

Microsoft.Design

Złamanie zmiany

Złamanie

Przyczyna

Implementuje typu publicznego lub chronione ICollection , ale nie zapewnia metodę jednoznacznie ICollection.CopyTo.Wersja jednoznacznie CopyTo musi zaakceptować dwa parametry i nie może mieć Array lub tablica Object jako swój pierwszy parametr.

Opis reguły

Ta reguła wymaga ICollection implementacje zapewnienie zdecydowanie wpisane członków tak, aby użytkownicy nie są wymagane do oddania argumenty do Object należy wpisać przy korzystaniu z funkcji dostępnych przy użyciu interfejsu.Zasada ta zakłada, że typ który implementuje ICollection jest tak, aby zarządzać kolekcją wystąpień tego typu, który jest silniejszy niż Object.

ICollectionimplementuje IEnumerable interfejsu.Jeśli rozszerzenie obiektów w kolekcji ValueType, musisz podać jednoznacznie członka na GetEnumerator do uniknięcia spadek wydajności, które jest spowodowane przez boksie.To nie jest wymagane przy obiektów kolekcji są typu odwołania.

Aby zaimplementować jednoznacznie wersji elementem interfejsu, implementują członków interfejsu jawnie przy użyciu nazw w formie InterfaceName.InterfaceMemberName, takich jak CopyTo.Członkowie jawnego interfejsu używać typów danych, które są zadeklarowane przez interfejs.Wdrożenie jednoznacznie członków za pomocą interfejsu nazwę uczestnika, takich jak CopyTo.Stwierdzenie jednoznacznie członków jako public i deklarować parametrów i zwracają wartości, które mają być silne typu, który jest zarządzany przez kolekcję.Silne typy zastąpić słabsze typów, takich jak Object i Array , są zadeklarowane przez interfejs.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, zaimplementowany członek interfejsu jawnie (zadeklarowania go jako CopyTo).Dodaj publicznego członka jednoznacznie zadeklarowany jako CopyTo, i go podjąć jednoznacznie tablicy jako swój pierwszy parametr.

Kiedy do pomijania ostrzeżenia

Ostrzeżenie od tej reguły można pominąć, jeśli wdrożenia nowej kolekcji oparta na obiektach, takich jak drzewo binarne, gdzie typów, które rozszerzyć nową kolekcję określenia typu silne.Te typy powinny być zgodne z tą regułą i narazić jednoznacznie członków.

Przykład

W poniższym przykładzie zademonstrowano poprawny sposób implementacji 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();
      }
   }
}

Zasady pokrewne

CA1038: Wyliczenia powinny być silnie typizowane

CA1039: Listy są silnie typizowane

Zobacz też

Informacje

Array

IEnumerable

ICollection

Object