CA1039: Listelerin türü kesin olarak belirlenmiştir
TürAdı |
ListsAreStronglyTyped |
CheckId |
CA1039 |
Kategori |
Microsoft.Design |
Bozan Değişiklik |
Bozan |
Sebep
Ortak veya korumalı türler IList uygular , ancak bir veya daha fazlası için türü kesin belirlenmiş bir yöntem sağlamaz:
IList öğesi
IList Ekle
IList barındırır.
IList.IndexOf
IList Ekle
IList Kaldır
Kural Tanımı
Bu kural IList uygulamalarını türü kesin belirlenmiş üyeler sağlamak için gerektirir, böylece kullanıcıların arabirim tarafından sağlanan işlevselliği kullandığı zaman, bağımsız değişkenleri Object türüne atamaları gerekli değildir.Bir IList arabirimi dizin tarafından erişilen nesneler topluluğu tarafından uygulanır.Bu kural, türün IList uyguladığını varsayar.Amaç ise Object 'den daha güçlü tür örnekleri topluluğunu yönetmektir.
IList bir ICollection ve IEnumerable arabirimlerini uygular.Bir IList uygularsanız, ICollection için gerekli türü kesin belirlenmiş üyeler sağlamalısınız.Koleksiyondaki nesneler genişletilirse ValueType,kutulama tarafından neden olan düşüşü önlemek amacıyla GetEnumerator için türü kesin belirlenmiş üyeler sağlamalısınız.Koleksiyonun nesneleri bir başvuru türü olduğunda bu gerekli değildir.
Bu kural ile uyumlu olacak şekilde Add gibi arabirim üyelerini açıkça InterfaceName.InterfaceMemberName formu içinde adlarını kullanarak uygulayın.Açık arabirim üyeleri arabirim tarafından bildirilen veri türlerini kullanır.Türü kesin belirlenmiş üyeleri Add gibi arabirim üye adı kullanarak uygulayın.Türü kesin belirlenmiş üyeleri ortak olarak bildirin, parametreleri ve dönüş değerlerini koleksiyon tarafından yönetilen güçlü türden olması için bildirin.Arabirim tarafından bildirilen Object ve Array gibi güçlü türler zayıf türlerin yerini alır.
İhlallerin Düzeltilmesi
Bu kuralın ihlalini düzeltmek için açıkça IList üyelerini uygulayın ve önceden belirtilen üyeler için türü kesin belirlenmiş alternatifler sağlayın.Bir IList arabirimini doğru uygulayan ve gerekli türü kesin belirlenmiş üyeleri sağlayan kod için bir sonraki örneğe bakınız.
Uyarılar Ne Zaman Bastırılmalı
Güçlü türü belirleyen yeni koleksiyonları genişleten türlerin olduğu bağlı bir listedeki gibi, yeni bir nesne tabanlı koleksiyon uyguladığınızda bu kuraldan uyarıyı gizleyin.Bu türler, bu kurala uymalıdır ve türü kesin belirlenmiş üyeleri açığa çıkarmalıdır.
Örnek
Aşağıdaki örnekte, tür YourType tüm türü kesin belirlenmiş koleksiyonlar gibi CollectionBase genişletir.Dikkat edin, CollectionBase bir IList arabiriminin açık uygulamasını sizin için sağlar.Bu nedenle, yalnızca türü kesin belirlenmiş üyeleri IList ve ICollection için sağlamalısınız.
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);
}
}
}
İlgili Kurallar
CA1035: ICollection uygulamalarında türü kesin olarak belirtilmiş üyeler olmalıdır
CA1038: Numaralandırıcıların türü kesin olarak belirtilmelidir