c# - ReadOnlyCollection如何隐藏Add和Remove方法

标签 c# interface readonly-collection

ReadOnlyCollection<T>实现 ICollection<T>具有添加和删除等方法的接口(interface)。我知道如何使用属性从 Intellisense 中隐藏方法,但是如果我尝试使用这些方法怎么可能导致实际的编译错误?

(顺便说一句,我知道在 ROC 上调用 Add 和 Remove 没有意义,这是一个关于导致继承成员编译错误的问题,而不是使用正确的数据结构)。

最佳答案

它们是用 explicit interface implementation 实现的,像这样:

void ICollection<T>.Add(T item) {
    throw NotSupportedException();
}

该方法仍然可调用,但前提是您将对象视为 ICollection<T>。 .例如:

ReadOnlyCollection<int> roc = new ReadOnlyCollection<int>(new[] { 1, 2, 3 });
// Invalid
// roc.Add(10);

ICollection<int> collection = roc;
collection.Add(10); // Valid at compile time, but will throw an exception

关于c# - ReadOnlyCollection如何隐藏Add和Remove方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122096/

相关文章:

c# - 验证来自 OneLogin 的 Saml 响应

c# - Wpf 图像控件(绑定(bind)到属性)第一次后不刷新

c# - 支持单个类型参数的协变和逆变

c# - 为什么 IReadOnlyCollection 有 ElementAt 但没有 IndexOf

c# - 在不实现 IXmlSerializable 的情况下序列化只读集合

c# - GC运行后对象会发生什么?

c# - 是否有与 python 的 os.path.normpath 等效的 C#?

c++ - 使用 "interface"时没有在类中声明成员函数

c++ - 类接口(interface) : Basic or Complex?

c# - 如何以只读方式传递字节数组?