m-y*_*m-y 5 c# fxcop explicit-interface readonly-collection
如果查看只读集合的代码,它没有"添加"方法,而是定义ICollection<T>.Add(T Value)方法(显式接口实现).
当我用我的ReadOnlyDictionary类做了类似的事情时,FxCop 10抱怨我打破了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 }
}
Run Code Online (Sandbox Code Playgroud)
ReadOnlyCollectionClass:
public class ReadOnlyCollection<T> : ICollection<T>
{
void ICollection<T>.Add(T item) { //Throw Exception }
}
Run Code Online (Sandbox Code Playgroud)
那么,这是误报吗?微软的基本代码是坏的吗?是什么赋予了?
一个很多的微软的源代码"失败"的FxCop和StyleCop的.主要原因是这些工具是新的; 很多BCL都是由许多程序员编写的,然后才有人对.NET有任何经验.
我会说在这个特殊情况下这是误报.但这取决于你所说的"假".我认为集合界面的运行时性质最好.可以认为只读集合违反了LSP.但是显式实现充当了"暗示",即你的类不是真正的(完整)集合.
| 归档时间: |
|
| 查看次数: |
1480 次 |
| 最近记录: |