If you look at the code for a read-only collection it does not have an "Add" method, but instead defines the ICollection<T>.Add(T Value)
method (explicit interface implementation).
When I did something similar with my ReadOnlyDictionary class, FxCop 10 complains that I'm breaking CA1033.
public class ReadOnlyDictionary<TKey, TValue> : IDictionary<TKey, TValue>
{
//CA1033 ERROR
void IDictionary<TKey, TValue>.Add(TKey, TValue) { //Throw Exception }
}
public class ReadOnlyDictionary<TKey, TValue> : IDictionary<TKey, TValue>
{
//NO CA1033 ERROR
Add(TKey, TValue) { //Throw Exception }
}
ReadOnlyCollectionClass:
public class ReadOnlyCollection<T> : ICollection<T>
{
void ICollection<T>.Add(T item) { //Throw Exception }
}
So, is this a false positive? Is Microsoft's base code bad? What gives?