CA1039: Listas são fortemente tipadas
TypeName |
ListsAreStronglyTyped |
CheckId |
CA1039 |
<strong>Categoria</strong> |
Microsoft.design |
Alteração significativa |
Quebrando |
Causa
O público ou protegido digite implementa System.Collections.IList , mas não fornece um método com rigidez de tipos para uma ou mais das seguintes opções:
IList.Item
IList.Add
IList.Contains
IList.IndexOf
IList.Insert
IList.Remove
Descrição da regra
Esta regra requer IList implementações para fornecer altamente digitado membros para que os usuários não precisam converter argumentos para o System.Object digite quando usarem a funcionalidade fornecida pela interface.O IList interface é implementada por coleções de objetos que podem ser acessados pelo índice.Esta regra pressupõe que o tipo que implementa IList faz isso para gerenciar uma coleção de instâncias de um tipo que é mais forte que Object.
IListimplementa o System.Collections.ICollection e System.Collections.IEnumerable interfaces.Se você implementar IList, você deve fornecer os membros com rigidez de tipos necessários para ICollection.Se os objetos na coleção estendem System.ValueType, você deve fornecer um membro com rigidez de tipos para GetEnumerator para evitar a diminuição no desempenho causado pela conversão boxing; Isso não é necessário quando os objetos da coleção são um tipo de referência.
Para cumprir essa regra, implemente os membros de interface explicitamente usando nomes no formulário InterfaceName.InterfaceMemberName, como Add.Os membros de interface explícita usar os tipos de dados que são declarados pela interface.Implementar os membros fortemente tipados usando o nome do membro de interface, como Add.Declarar os membros com rigidez de tipos como public e declarar parâmetros e retornar valores a serem do tipo de alta segurança que é gerenciado pela coleção.Os tipos de alta seguras substituir os tipos mais fracos como Object e Array que são declaradas pela interface.
Como corrigir violações
Para corrigir uma violação desta regra, implementar explicitamente IList membros e fornecer alternativas com rigidez de tipos para os membros que foram observados anteriormente.Para o código que implementa corretamente o IList interface e fornece os membros fortemente tipados, consulte o exemplo a seguir.
Quando suprimir avisos
Eliminar um aviso esta regra quando você implementa uma nova coleção baseada em objeto, como, por exemplo, uma lista vinculada, onde os tipos de que se estendem a nova coleção determinam o tipo de alta segurança.Esses tipos devem cumprir essa regra e expor membros fortemente tipados.
Exemplo
No exemplo a seguir, o tipo de YourType estende System.Collections.CollectionBase, conforme devem todas as coleções fortemente tipadas.Observe que CollectionBase fornece a implementação explícita da IList interface para você.Portanto, você deve fornecer somente os membros com rigidez de tipos para IList e 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);
}
}
}
Regras relacionadas
CA1035: ICollection implementações com rigidez de tipos membros
CA1038: Enumeradores devem ser fortemente tipados
Consulte também
Referência
System.Collections.CollectionBase
System.Collections.ICollection