CA1010: Koleksiyonlar genel arabirim uygulamalıdır
TypeName |
CollectionsShouldImplementGenericInterface |
CheckId |
CA1010 |
Kategori |
Microsoft.Design |
Değişiklik kesiliyor |
Bölünemez |
Neden
Dışarıdan görünen bir tür uygulayan IEnumerable arabirim ancak uygulamaz IEnumerable arabirimi ve içeren derleme hedefleri .NET Framework 2,0.Bu kuralı uygulamak türleri yok sayar IDictionary.
Kural Tanımı
Koleksiyonunun kullanılabilirliğini genişletmek için genel koleksiyonu arabirimleri birini uygulamak.Daha sonra toplama aşağıdaki gibi genel koleksiyon türleri doldurmak için kullanılabilir:
İhlalleri düzeltmek nasıl
Bu kuralı ihlal düzeltmek için aşağıdaki genel koleksiyonu arabirimlerden birini uygulayın:
Uyarıları ne zaman
Uyarı Bu kuraldan bastırmak güvenlidir; Ancak, koleksiyon daha sınırlı kullanıma sahip olur.
Örnek ihlali
Description
Genel olmayan türeyen bir sınıfı (başvuru türü) aşağıdaki örnekte gösterildiği CollectionBase bu kuralını ihlal eden sınıf.
Kod
using System;
using System.Collections;
namespace Samples
{
public class Book
{
public Book()
{
}
}
public class BookCollection : CollectionBase
{
public BookCollection()
{
}
public void Add(Book value)
{
InnerList.Add(value);
}
public void Remove(Book value)
{
InnerList.Remove(value);
}
public void Insert(int index, Book value)
{
InnerList.Insert(index, value);
}
public Book this[int index]
{
get { return (Book)InnerList[index]; }
set { InnerList[index] = value; }
}
public bool Contains(Book value)
{
return InnerList.Contains(value);
}
public int IndexOf(Book value)
{
return InnerList.IndexOf(value);
}
public void CopyTo(Book[] array, int arrayIndex)
{
InnerList.CopyTo(array, arrayIndex);
}
}
}
Comments
Bu ihlali ihlalinden düzeltmek için genel arabirimleri uygulayan ya zaten hem genel hem genel olmayan arabirimleri gibi uygulayan bir tür temel sınıf değiştirmek Collection<T> sınıfı.
Temel sınıf değişikliği düzeltme
Description
Aşağıdaki örnek ihlali olmayan-genel topluluğunun temel sınıf değiştirerek giderir CollectionBase genel sınıfa Collection<T> (Collection(Of T) , Visual Basic) sınıfı.
Kod
using System;
using System.Collections.ObjectModel;
namespace Samples
{
public class Book
{
public Book()
{
}
}
public class BookCollection : Collection<Book>
{
public BookCollection()
{
}
}
}
Comments
Zaten yayımlanmış bir sınıfının temel sınıfı varolan Tüketiciler için son değişiklik kabul edilir.
Arabirim uygulaması tarafından düzeltme
Description
The following example fixes the violation by implementing these generic interfaces: IEnumerable<T>, ICollection<T>, and IList<T> (IEnumerable(Of T), ICollection(Of T), and IList(Of T) in Visual Basic).
Kod
using System;
using System.Collections;
using System.Collections.Generic;
namespace Samples
{
public class Book
{
public Book()
{
}
}
public class BookCollection : CollectionBase, IList<Book>
{
public BookCollection()
{
}
int IList<Book>.IndexOf(Book item)
{
return this.List.IndexOf(item);
}
void IList<Book>.Insert(int location, Book item)
{
}
Book IList<Book>.this[int index]
{
get { return (Book) this.List[index]; }
set { }
}
void ICollection<Book>.Add(Book item)
{
}
bool ICollection<Book>.Contains(Book item)
{
return true;
}
void ICollection<Book>.CopyTo(Book[] array, int arrayIndex)
{
}
bool ICollection<Book>.IsReadOnly
{
get { return false; }
}
bool ICollection<Book>.Remove(Book item)
{
if (InnerList.Contains(item))
{
InnerList.Remove(item);
return true;
}
return false;
}
IEnumerator<Book> IEnumerable<Book>.GetEnumerator()
{
return new BookCollectionEnumerator(InnerList.GetEnumerator());
}
private class BookCollectionEnumerator : IEnumerator<Book>
{
private IEnumerator _Enumerator;
public BookCollectionEnumerator(IEnumerator enumerator)
{
_Enumerator = enumerator;
}
public Book Current
{
get { return (Book)_Enumerator.Current; }
}
object IEnumerator.Current
{
get { return _Enumerator.Current; }
}
public bool MoveNext()
{
return _Enumerator.MoveNext();
}
public void Reset()
{
_Enumerator.Reset();
}
public void Dispose()
{
}
}
}
}
İlgili kuralları
CA1005: Genel türlerde aşırı parametrelerden kaçının
CA1000: Genel türlerde statik üyeleri belirtme
CA1002: Genel listeleri gösterme
CA1006: Üye imzalarında genel türleri iç içe kullanmayın
CA1004: Genel yöntemler tür parametresi sağlamalıdır
CA1003: Genel olay işleyici örnekleri kullan
CA1007: Uygun yerlerde genel türler kullanın