c# - ReadOnlyCollection 类是不良设计的好例子吗?

标签 c# frameworks collections liskov-substitution-principle

<分区>

查看 ReadOnlyCollection 的规范类,它确实实现了 IList界面,对吧。

IList 接口(interface)有Add/Update/Read 方法,我们称之为接口(interface)的前置条件。如果我有一个 IList,我的应用程序中的任何地方都应该能够执行所有此类操作。

但是如果我在代码中的某处返回一个 ReadOnlyCollection 并尝试调用 .Add(...) 方法呢?它抛出 NotSupportedException。你认为这是糟糕设计的一个很好的例子吗?另外,这个类是否打破了Liskov Substitution Principle? ?

微软为什么要这样实现?使这个 ReadOnlyCollection 仅实现 IEnumerable 接口(interface)(顺便说一下,它已经是只读的)是否应该更容易(更好)?

最佳答案

是的,这确实是糟糕的设计。 .NET 中缺少集合接口(interface):没有只读接口(interface)。

你知道吗string[]工具 IList<string> (其他类型也一样)?这有同样的问题:你会期望你可以调用 AddRemove在界面上,但它会抛出。

不幸的是,在不破坏向后兼容性的情况下,这不能再改变了,但我同意你的看法,这是非常糟糕的设计。更好的设计应该是只读功能的单独接口(interface)。

关于c# - ReadOnlyCollection 类是不良设计的好例子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3894921/

相关文章:

c# - 检查两个集合中是否存在任何元素

c# - 如何在 XNA 中播放动态声音?

ios - Xcode 框架版本/当前/标题/错误

ios - Xcode 的 ios 开发中缺少框架

c# - 在一个 Nuget 包中定位 .Net Core Framework 和完整的 .Net 4.5/4.6 Framework

c# - 更改 PropertyGrid 左侧集合编辑器/ View 的宽度

java - 我如何从迭代器中获取两个连续的值

c# - 这怎么能用多线程来完成呢?

c# - 无法创建异步 Main

C# 将 T 转换为 long