CA1039: Seznamy jsou silného typu
Název_typu |
ListsAreStronglyTyped |
CheckId |
CA1039 |
Kategorie |
Microsoft.design |
Změnit rozdělení |
Rozdělení |
Příčina
Chráněný nebo veřejný, zadejte implementuje IList , ale neposkytuje silnými metodu pro jeden nebo více z následujících:
IList.Item
IList.Add
IList.Contains
IList.IndexOf
IList.Insert
IList.Remove
Popis pravidla
Toto pravidlo vyžaduje IList implementace poskytnout důrazně zadané členy tak, aby uživatelé nemusí odevzdaných argumenty Object zadejte při použití funkce, které poskytuje rozhraní.IList Kolekce objektů, které lze přistupovat pomocí indexu je implementováno rozhraní.Toto pravidlo se předpokládá, že typ, implementuje IList to Správa kolekce instancí typu, která je silnější než Object.
IListimplementuje ICollection a IEnumerable rozhraní.Pokud implementujete IList, je nutné poskytnout požadované silnými členy pro ICollection.Pokud objektů v kolekci rozšíření ValueType, musí poskytnout silnými člen pro GetEnumerator zabránit snížení výkonu, která je způsobena boxerská; není nutné objekty, kolekce jsou typ odkazu.
Chcete-li v souladu s tímto pravidlem implementovat členy rozhraní explicitně pomocí názvů ve formě InterfaceName.InterfaceMemberName, jako například Add.Členy rozhraní explicitní typy dat, které jsou deklarovány pomocí rozhraní.Implementace silnými členy pomocí členské jméno rozhraní, například Add.Deklarovat jako public, silnými členy a deklarovat parametry a vracet hodnoty typu silné, které spravuje kolekci.Silné typy nahradit slabší typy jako Object a Array jsou deklarovaných rozhraní.
Jak opravit porušení
Vyřešit porušení tohoto pravidla explicitně implementovat IList členů a silnými alternativy pro členy, které byly dříve poznamenat.Pro kód, který implementuje správně IList rozhraní a poskytuje požadované silnými členy, viz následující příklad.
Při potlačení upozornění
Při implementaci nové založené na objekt kolekce, například propojený seznam, kde určit typy, které rozšiřují nové kolekce silný typ, potlačí upozornění od tohoto pravidla.Tyto typy by v souladu s tímto pravidlem a vystavit silnými členy.
Příklad
V následujícím příkladu typ YourType rozšiřuje CollectionBase, jako by všechny silnými kolekce.Všimněte si, že CollectionBase poskytuje explicitní implementaci IList rozhraní pro vás.Proto je nutné zadat pouze silnými členy pro IList a ICollection.
using System;
using System.Collections;
namespace DesignLibrary
{
public class YourType
{
// Implementation for your strong type goes here.
public YourType() {}
}
public class YourTypeCollection : CollectionBase
{
// Provide the strongly typed members for IList.
public YourType this[int index]
{
get
{
return (YourType) ((IList)this)[index];
}
set
{
((IList)this)[index] = value;
}
}
public int Add(YourType value)
{
return ((IList)this).Add ((object) value);
}
public bool Contains(YourType value)
{
return ((IList)this).Contains((object) value);
}
public void Insert(int index, YourType value)
{
((IList)this).Insert(index, (object) value);
}
public void Remove(YourType value)
{
((IList)this).Remove((object) value);
}
public int IndexOf(YourType value)
{
return ((IList)this).IndexOf((object) value);
}
// Provide the strongly typed member for ICollection.
public void CopyTo(YourType[] array, int index)
{
((ICollection)this).CopyTo(array, index);
}
}
}
Souvisejících pravidel
CA1035: Implementace ICollection mají členy silného typu
CA1038: Enumerátory by měly být silného typu